summaryrefslogtreecommitdiffstats
path: root/contrib/libs
diff options
context:
space:
mode:
authorYDBot <[email protected]>2025-09-26 05:40:56 +0000
committerYDBot <[email protected]>2025-09-26 05:40:56 +0000
commita7e5af7043672a57f330696519f435f19fcd03d0 (patch)
treefa751accfbb8afcd928340c9078b00453c07dde1 /contrib/libs
parentd7cd65635ff05f602b8eb7c6e2a42217057dd2c6 (diff)
parentee5ee24a4d661a146d6142a78050207193937281 (diff)
Merge pull request #25828 from ydb-platform/merge-rightlib-250926-0050
Diffstat (limited to 'contrib/libs')
-rw-r--r--contrib/libs/apache/arrow/cpp/src/arrow/vendored/datetime/date.h8
-rw-r--r--contrib/libs/apache/arrow/cpp/src/arrow/vendored/string_view.hpp24
-rw-r--r--contrib/libs/apache/arrow/patches/deprecated-literal-operator.sh3
-rw-r--r--contrib/libs/cxxsupp/builtins/.yandex_meta/build.ym2
-rw-r--r--contrib/libs/cxxsupp/builtins/cpu_model/aarch64.c8
-rw-r--r--contrib/libs/cxxsupp/builtins/cpu_model/aarch64/fmv/elf_aux_info.inc (renamed from contrib/libs/cxxsupp/builtins/cpu_model/aarch64/fmv/freebsd.inc)0
-rw-r--r--contrib/libs/cxxsupp/builtins/cpu_model/aarch64/lse_atomics/elf_aux_info.inc (renamed from contrib/libs/cxxsupp/builtins/cpu_model/aarch64/lse_atomics/freebsd.inc)0
-rw-r--r--contrib/libs/cxxsupp/builtins/ya.make4
-rw-r--r--contrib/libs/cxxsupp/libcxx/.yandex_meta/build.ym3
-rw-r--r--contrib/libs/cxxsupp/libcxx/ya.make3
-rw-r--r--contrib/libs/cxxsupp/libcxxabi/.yandex_meta/__init__.py20
-rw-r--r--contrib/libs/cxxsupp/libcxxabi/ya.make19
-rw-r--r--contrib/libs/cxxsupp/openmp/.yandex_meta/override.nix4
-rw-r--r--contrib/libs/cxxsupp/openmp/ya.make4
-rw-r--r--contrib/libs/fmt/include/fmt/format.h4
-rw-r--r--contrib/libs/fmt/include/fmt/xchar.h4
-rw-r--r--contrib/libs/fmt/patches/03-deprecated-literal-operator.sh3
-rw-r--r--contrib/libs/libfuzzer/.yandex_meta/override.nix4
-rw-r--r--contrib/libs/libfuzzer/lib/fuzzer/afl/ya.make2
-rw-r--r--contrib/libs/libfuzzer/ya.make4
-rw-r--r--contrib/libs/libunwind/.yandex_meta/override.nix4
-rw-r--r--contrib/libs/libunwind/ya.make4
-rw-r--r--contrib/libs/llvm/flang-rt/.yandex_meta/__init__.py38
-rw-r--r--contrib/libs/llvm/flang-rt/.yandex_meta/devtools.copyrights.report46
-rw-r--r--contrib/libs/llvm/flang-rt/.yandex_meta/devtools.licenses.report948
-rw-r--r--contrib/libs/llvm/flang-rt/.yandex_meta/disable-fortran.patch13
-rw-r--r--contrib/libs/llvm/flang-rt/.yandex_meta/licenses.list.txt508
-rw-r--r--contrib/libs/llvm/flang-rt/.yandex_meta/override.nix20
-rw-r--r--contrib/libs/llvm/flang-rt/CODE_OF_CONDUCT.md3
-rw-r--r--contrib/libs/llvm/flang-rt/CONTRIBUTING.md16
-rw-r--r--contrib/libs/llvm/flang-rt/LICENSE.TXT279
-rw-r--r--contrib/libs/llvm/flang-rt/README.md44
-rw-r--r--contrib/libs/llvm/flang-rt/SECURITY.md5
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/CODE_OWNERS.TXT13
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/LICENSE.TXT234
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/README.md193
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/config-linux.h24
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/config-musl.h3
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/config-win.h8
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/config.h11
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/allocator-registry.h60
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/array-constructor.h57
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/assign-impl.h31
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/buffer.h224
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/connection.h144
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/derived.h51
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/descriptor.h623
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/emit-encoded.h117
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/environment.h81
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/file.h116
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/format-implementation.h613
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/format.h209
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/internal-unit.h64
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/io-error.h83
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/io-stmt.h888
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/lock.h116
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/memory.h173
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/namelist.h54
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/non-tbp-dio.h60
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/numeric-templates.h371
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/random-templates.h111
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/reduction-templates.h419
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/stat.h67
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/terminator.h139
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/tools.h576
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/type-code.h78
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/type-info.h339
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/utf.h73
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/work-queue.h578
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/ISO_Fortran_binding.cpp302
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/ISO_Fortran_util.h102
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/allocatable.cpp246
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/allocator-registry.cpp42
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/array-constructor.cpp182
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/assign.cpp833
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/buffer.cpp29
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/character.cpp922
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/command.cpp377
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/complex-powi.cpp171
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/complex-reduction.c194
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/complex-reduction.h158
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/connection.cpp36
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/copy.cpp215
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/copy.h25
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/derived-api.cpp159
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/derived.cpp489
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/descriptor-io.cpp809
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/descriptor-io.h35
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/descriptor.cpp329
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/dot-product.cpp259
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/edit-input.cpp1195
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/edit-input.h57
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/edit-output.cpp978
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/edit-output.h145
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/environment-default-list.h30
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/environment.cpp252
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/exceptions.cpp201
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/execute.cpp287
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/extensions.cpp341
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/external-unit.cpp355
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/extrema.cpp888
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/file.cpp480
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/findloc.cpp362
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/format.cpp24
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/inquiry.cpp97
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/internal-unit.cpp192
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/io-api-common.h97
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/io-api-minimal.cpp164
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/io-api.cpp1303
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/io-error.cpp165
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/io-stmt.cpp1618
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/iostat.cpp129
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/main.cpp48
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/matmul-transpose.cpp381
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/matmul.cpp481
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/memory.cpp46
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/misc-intrinsic.cpp121
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/namelist.cpp626
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/non-tbp-dio.cpp32
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/numeric.cpp938
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/pointer.cpp283
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/product.cpp214
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/pseudo-unit.cpp169
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/ragged.cpp85
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/random.cpp228
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/reduce.cpp1103
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/reduction.cpp409
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/stack.h136
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/stat.cpp110
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/stop.cpp229
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/sum.cpp232
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/support.cpp53
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/temporary-stack.cpp227
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/terminator.cpp103
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/time-intrinsic.cpp580
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/tools.cpp371
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/transformational.cpp999
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/type-code.cpp242
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/type-info.cpp338
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/unit-map.cpp137
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/unit-map.h103
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/unit.cpp875
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/unit.h306
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/utf.cpp128
-rw-r--r--contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/work-queue.cpp149
-rw-r--r--contrib/libs/llvm/flang-rt/flang/LICENSE.TXT234
-rw-r--r--contrib/libs/llvm/flang-rt/flang/README.md42
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/Fortran-consts.h46
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/ISO_Fortran_binding_wrapper.h38
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/api-attrs.h209
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/bit-population-count.h96
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/constexpr-bitset.h147
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/enum-class.h79
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/enum-set.h231
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/erfc-scaled.h120
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/fast-int-set.h106
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/float128.h88
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/float80.h43
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/format.h986
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/idioms.h156
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/leading-zero-bit-count.h96
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/optional.h242
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/real.h143
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/reference-wrapper.h114
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/restorer.h56
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/type-kinds.h63
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/uint128.h308
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/variant.h30
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/visit.h103
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Common/windows-include.h29
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Decimal/binary-floating-point.h211
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Decimal/decimal.h146
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/ISO_Fortran_binding.h215
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/allocatable.h133
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/allocator-registry-consts.h20
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/array-constructor-consts.h97
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/assign.h85
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/c-or-cpp.h31
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/character.h132
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/command.h78
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/complex.h36
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/cpp-type.h118
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/derived-api.h73
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/descriptor-consts.h76
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/entry-names.h44
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/exceptions.h52
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/execute.h29
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/extensions.h93
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/freestanding-tools.h229
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/inquiry.h43
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/io-api.h370
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/iostat-consts.h93
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/iostat.h23
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/magic-numbers.h129
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/main.h23
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/matmul-instances.inc338
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/matmul-transpose.h49
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/matmul.h48
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/misc-intrinsic.h31
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/numeric.h458
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/pointer.h126
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/ragged.h60
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/random.h42
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/reduce.h565
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/reduction.h548
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/stop.h43
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/support.h54
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/temporary-stack.h67
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/time-intrinsic.h51
-rw-r--r--contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/transformational.h182
-rw-r--r--contrib/libs/llvm/flang-rt/flang/lib/Decimal/big-radix-floating-point.h396
-rw-r--r--contrib/libs/llvm/flang-rt/flang/lib/Decimal/binary-to-decimal.cpp392
-rw-r--r--contrib/libs/llvm/flang-rt/flang/lib/Decimal/decimal-to-binary.cpp564
-rw-r--r--contrib/libs/llvm/flang-rt/patches/pr157840-missing-include-cstdlib.patch22
-rw-r--r--contrib/libs/llvm/flang-rt/patches/pr160096-create-process-w.patch31
-rw-r--r--contrib/libs/llvm/flang-rt/ya.make100
-rw-r--r--contrib/libs/utf8proc/.yandex_meta/devtools.licenses.report8
-rw-r--r--contrib/libs/utf8proc/.yandex_meta/override.nix4
-rw-r--r--contrib/libs/utf8proc/NEWS.md17
-rw-r--r--contrib/libs/utf8proc/README.md20
-rw-r--r--contrib/libs/utf8proc/utf8proc.c9
-rw-r--r--contrib/libs/utf8proc/utf8proc.h11
-rw-r--r--contrib/libs/utf8proc/utf8proc_data.c14241
-rw-r--r--contrib/libs/utf8proc/ya.make4
224 files changed, 52500 insertions, 7173 deletions
diff --git a/contrib/libs/apache/arrow/cpp/src/arrow/vendored/datetime/date.h b/contrib/libs/apache/arrow/cpp/src/arrow/vendored/datetime/date.h
index 6d0455a354b..484ba0c9aa1 100644
--- a/contrib/libs/apache/arrow/cpp/src/arrow/vendored/datetime/date.h
+++ b/contrib/libs/apache/arrow/cpp/src/arrow/vendored/datetime/date.h
@@ -967,8 +967,8 @@ operator<<(std::basic_ostream<CharT, Traits>& os, const year_month_weekday_last&
inline namespace literals
{
-CONSTCD11 date::day operator "" _d(unsigned long long d) NOEXCEPT;
-CONSTCD11 date::year operator "" _y(unsigned long long y) NOEXCEPT;
+CONSTCD11 date::day operator ""_d(unsigned long long d) NOEXCEPT;
+CONSTCD11 date::year operator ""_y(unsigned long long y) NOEXCEPT;
} // inline namespace literals
#endif // !defined(_MSC_VER) || (_MSC_VER >= 1900)
@@ -1870,7 +1870,7 @@ inline namespace literals
CONSTCD11
inline
date::day
-operator "" _d(unsigned long long d) NOEXCEPT
+operator ""_d(unsigned long long d) NOEXCEPT
{
return date::day{static_cast<unsigned>(d)};
}
@@ -1878,7 +1878,7 @@ operator "" _d(unsigned long long d) NOEXCEPT
CONSTCD11
inline
date::year
-operator "" _y(unsigned long long y) NOEXCEPT
+operator ""_y(unsigned long long y) NOEXCEPT
{
return date::year(static_cast<int>(y));
}
diff --git a/contrib/libs/apache/arrow/cpp/src/arrow/vendored/string_view.hpp b/contrib/libs/apache/arrow/cpp/src/arrow/vendored/string_view.hpp
index a2d5567854f..3ef07575932 100644
--- a/contrib/libs/apache/arrow/cpp/src/arrow/vendored/string_view.hpp
+++ b/contrib/libs/apache/arrow/cpp/src/arrow/vendored/string_view.hpp
@@ -144,22 +144,22 @@ inline namespace literals {
inline namespace string_view_literals {
-constexpr std::string_view operator "" _sv( const char* str, size_t len ) noexcept // (1)
+constexpr std::string_view operator ""_sv( const char* str, size_t len ) noexcept // (1)
{
return std::string_view{ str, len };
}
-constexpr std::u16string_view operator "" _sv( const char16_t* str, size_t len ) noexcept // (2)
+constexpr std::u16string_view operator ""_sv( const char16_t* str, size_t len ) noexcept // (2)
{
return std::u16string_view{ str, len };
}
-constexpr std::u32string_view operator "" _sv( const char32_t* str, size_t len ) noexcept // (3)
+constexpr std::u32string_view operator ""_sv( const char32_t* str, size_t len ) noexcept // (3)
{
return std::u32string_view{ str, len };
}
-constexpr std::wstring_view operator "" _sv( const wchar_t* str, size_t len ) noexcept // (4)
+constexpr std::wstring_view operator ""_sv( const wchar_t* str, size_t len ) noexcept // (4)
{
return std::wstring_view{ str, len };
}
@@ -1336,22 +1336,22 @@ nssv_inline_ns namespace string_view_literals {
#if nssv_CONFIG_STD_SV_OPERATOR && nssv_HAVE_STD_DEFINED_LITERALS
-nssv_constexpr nonstd::sv_lite::string_view operator "" sv( const char* str, size_t len ) nssv_noexcept // (1)
+nssv_constexpr nonstd::sv_lite::string_view operator ""sv( const char* str, size_t len ) nssv_noexcept // (1)
{
return nonstd::sv_lite::string_view{ str, len };
}
-nssv_constexpr nonstd::sv_lite::u16string_view operator "" sv( const char16_t* str, size_t len ) nssv_noexcept // (2)
+nssv_constexpr nonstd::sv_lite::u16string_view operator ""sv( const char16_t* str, size_t len ) nssv_noexcept // (2)
{
return nonstd::sv_lite::u16string_view{ str, len };
}
-nssv_constexpr nonstd::sv_lite::u32string_view operator "" sv( const char32_t* str, size_t len ) nssv_noexcept // (3)
+nssv_constexpr nonstd::sv_lite::u32string_view operator ""sv( const char32_t* str, size_t len ) nssv_noexcept // (3)
{
return nonstd::sv_lite::u32string_view{ str, len };
}
-nssv_constexpr nonstd::sv_lite::wstring_view operator "" sv( const wchar_t* str, size_t len ) nssv_noexcept // (4)
+nssv_constexpr nonstd::sv_lite::wstring_view operator ""sv( const wchar_t* str, size_t len ) nssv_noexcept // (4)
{
return nonstd::sv_lite::wstring_view{ str, len };
}
@@ -1360,22 +1360,22 @@ nssv_constexpr nonstd::sv_lite::wstring_view operator "" sv( const wchar_t* str,
#if nssv_CONFIG_USR_SV_OPERATOR
-nssv_constexpr nonstd::sv_lite::string_view operator "" _sv( const char* str, size_t len ) nssv_noexcept // (1)
+nssv_constexpr nonstd::sv_lite::string_view operator ""_sv( const char* str, size_t len ) nssv_noexcept // (1)
{
return nonstd::sv_lite::string_view{ str, len };
}
-nssv_constexpr nonstd::sv_lite::u16string_view operator "" _sv( const char16_t* str, size_t len ) nssv_noexcept // (2)
+nssv_constexpr nonstd::sv_lite::u16string_view operator ""_sv( const char16_t* str, size_t len ) nssv_noexcept // (2)
{
return nonstd::sv_lite::u16string_view{ str, len };
}
-nssv_constexpr nonstd::sv_lite::u32string_view operator "" _sv( const char32_t* str, size_t len ) nssv_noexcept // (3)
+nssv_constexpr nonstd::sv_lite::u32string_view operator ""_sv( const char32_t* str, size_t len ) nssv_noexcept // (3)
{
return nonstd::sv_lite::u32string_view{ str, len };
}
-nssv_constexpr nonstd::sv_lite::wstring_view operator "" _sv( const wchar_t* str, size_t len ) nssv_noexcept // (4)
+nssv_constexpr nonstd::sv_lite::wstring_view operator ""_sv( const wchar_t* str, size_t len ) nssv_noexcept // (4)
{
return nonstd::sv_lite::wstring_view{ str, len };
}
diff --git a/contrib/libs/apache/arrow/patches/deprecated-literal-operator.sh b/contrib/libs/apache/arrow/patches/deprecated-literal-operator.sh
new file mode 100644
index 00000000000..9aa38005c8b
--- /dev/null
+++ b/contrib/libs/apache/arrow/patches/deprecated-literal-operator.sh
@@ -0,0 +1,3 @@
+set -xue
+sed -e 's|operator "" |operator ""|g' cpp/src/arrow/vendored/datetime/date.h -i
+sed -e 's|operator "" |operator ""|g' cpp/src/arrow/vendored/string_view.hpp -i
diff --git a/contrib/libs/cxxsupp/builtins/.yandex_meta/build.ym b/contrib/libs/cxxsupp/builtins/.yandex_meta/build.ym
index 58bb1ed8a02..c9e76124555 100644
--- a/contrib/libs/cxxsupp/builtins/.yandex_meta/build.ym
+++ b/contrib/libs/cxxsupp/builtins/.yandex_meta/build.ym
@@ -1,6 +1,6 @@
{% extends '//builtin/bag.ym' %}
-{% block current_version %}21.1.0{% endblock %}
+{% block current_version %}21.1.1{% endblock %}
{% block current_url %}
https://github.com/llvm/llvm-project/releases/download/llvmorg-{{self.version().strip()}}/compiler-rt-{{self.version().strip()}}.src.tar.xz
diff --git a/contrib/libs/cxxsupp/builtins/cpu_model/aarch64.c b/contrib/libs/cxxsupp/builtins/cpu_model/aarch64.c
index be002dd7199..d7880529ebe 100644
--- a/contrib/libs/cxxsupp/builtins/cpu_model/aarch64.c
+++ b/contrib/libs/cxxsupp/builtins/cpu_model/aarch64.c
@@ -34,12 +34,12 @@ typedef struct __ifunc_arg_t {
_Bool __aarch64_have_lse_atomics
__attribute__((visibility("hidden"), nocommon)) = false;
-#if defined(__FreeBSD__)
+#if defined(__FreeBSD__) || defined(__OpenBSD__)
// clang-format off: should not reorder sys/auxv.h alphabetically
#include <sys/auxv.h>
// clang-format on
#include "aarch64/hwcap.inc"
-#include "aarch64/lse_atomics/freebsd.inc"
+#include "aarch64/lse_atomics/elf_aux_info.inc"
#elif defined(__Fuchsia__)
#include "aarch64/hwcap.inc"
#include "aarch64/lse_atomics/fuchsia.inc"
@@ -68,9 +68,9 @@ struct {
// clang-format off
#if defined(__APPLE__)
#include "aarch64/fmv/apple.inc"
-#elif defined(__FreeBSD__)
+#elif defined(__FreeBSD__) || defined(__OpenBSD__)
#include "aarch64/fmv/mrs.inc"
-#include "aarch64/fmv/freebsd.inc"
+#include "aarch64/fmv/elf_aux_info.inc"
#elif defined(__Fuchsia__)
#include "aarch64/fmv/fuchsia.inc"
#elif defined(__ANDROID__)
diff --git a/contrib/libs/cxxsupp/builtins/cpu_model/aarch64/fmv/freebsd.inc b/contrib/libs/cxxsupp/builtins/cpu_model/aarch64/fmv/elf_aux_info.inc
index aa975dc854f..aa975dc854f 100644
--- a/contrib/libs/cxxsupp/builtins/cpu_model/aarch64/fmv/freebsd.inc
+++ b/contrib/libs/cxxsupp/builtins/cpu_model/aarch64/fmv/elf_aux_info.inc
diff --git a/contrib/libs/cxxsupp/builtins/cpu_model/aarch64/lse_atomics/freebsd.inc b/contrib/libs/cxxsupp/builtins/cpu_model/aarch64/lse_atomics/elf_aux_info.inc
index 4a1f9c2c27c..4a1f9c2c27c 100644
--- a/contrib/libs/cxxsupp/builtins/cpu_model/aarch64/lse_atomics/freebsd.inc
+++ b/contrib/libs/cxxsupp/builtins/cpu_model/aarch64/lse_atomics/elf_aux_info.inc
diff --git a/contrib/libs/cxxsupp/builtins/ya.make b/contrib/libs/cxxsupp/builtins/ya.make
index 98ffe3b56ab..383d34b214a 100644
--- a/contrib/libs/cxxsupp/builtins/ya.make
+++ b/contrib/libs/cxxsupp/builtins/ya.make
@@ -12,9 +12,9 @@ LICENSE(
LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
-VERSION(21.1.0)
+VERSION(21.1.1)
-ORIGINAL_SOURCE(https://github.com/llvm/llvm-project/releases/download/llvmorg-21.1.0/compiler-rt-21.1.0.src.tar.xz)
+ORIGINAL_SOURCE(https://github.com/llvm/llvm-project/releases/download/llvmorg-21.1.1/compiler-rt-21.1.1.src.tar.xz)
NO_COMPILER_WARNINGS()
diff --git a/contrib/libs/cxxsupp/libcxx/.yandex_meta/build.ym b/contrib/libs/cxxsupp/libcxx/.yandex_meta/build.ym
index 6cf8416ff2f..44e7693fb5a 100644
--- a/contrib/libs/cxxsupp/libcxx/.yandex_meta/build.ym
+++ b/contrib/libs/cxxsupp/libcxx/.yandex_meta/build.ym
@@ -75,6 +75,9 @@ cat << EOF > ya.make
LIBRARY()
+# Ensure this library is mutually exclusive with "system stl" mode
+NO_BUILD_IF(USE_STL_SYSTEM)
+
LICENSE(
Apache-2.0 AND
Apache-2.0 WITH LLVM-exception AND
diff --git a/contrib/libs/cxxsupp/libcxx/ya.make b/contrib/libs/cxxsupp/libcxx/ya.make
index 5b56e018e25..8346845c4df 100644
--- a/contrib/libs/cxxsupp/libcxx/ya.make
+++ b/contrib/libs/cxxsupp/libcxx/ya.make
@@ -2,6 +2,9 @@
LIBRARY()
+# Ensure this library is mutually exclusive with "system stl" mode
+NO_BUILD_IF(USE_STL_SYSTEM)
+
LICENSE(
Apache-2.0 AND
Apache-2.0 WITH LLVM-exception AND
diff --git a/contrib/libs/cxxsupp/libcxxabi/.yandex_meta/__init__.py b/contrib/libs/cxxsupp/libcxxabi/.yandex_meta/__init__.py
index 96742daf8d4..f6cce72be13 100644
--- a/contrib/libs/cxxsupp/libcxxabi/.yandex_meta/__init__.py
+++ b/contrib/libs/cxxsupp/libcxxabi/.yandex_meta/__init__.py
@@ -45,14 +45,24 @@ def post_install(self):
)
with self.yamakes["."] as libcxxabi:
- # As of 1.2.3, musl libc does not provide __cxa_thread_atexit_impl
libcxxabi.after(
"SRCS",
"""
- IF (NOT MUSL)
- CFLAGS(
- -DHAVE___CXA_THREAD_ATEXIT_IMPL
- )
+ IF (OS_ANDROID)
+ # __cxa_thread_atexit_impl was introduced in Android 6.0
+ # https://android.googlesource.com/platform/bionic/+/main/libc/libc.map.txt#16
+ IF (ANDROID_API >= 23)
+ CFLAGS(
+ -DHAVE___CXA_THREAD_ATEXIT_IMPL
+ )
+ ENDIF()
+ ELSE()
+ # As of 1.2.3, musl libc does not provide __cxa_thread_atexit_impl
+ IF (NOT MUSL)
+ CFLAGS(
+ -DHAVE___CXA_THREAD_ATEXIT_IMPL
+ )
+ ENDIF()
ENDIF()
""",
)
diff --git a/contrib/libs/cxxsupp/libcxxabi/ya.make b/contrib/libs/cxxsupp/libcxxabi/ya.make
index c64ffff7e7f..0e7e3fae6dd 100644
--- a/contrib/libs/cxxsupp/libcxxabi/ya.make
+++ b/contrib/libs/cxxsupp/libcxxabi/ya.make
@@ -58,10 +58,21 @@ SRCS(
src/stdlib_typeinfo.cpp
)
-IF (NOT MUSL)
- CFLAGS(
- -DHAVE___CXA_THREAD_ATEXIT_IMPL
- )
+IF (OS_ANDROID)
+ # __cxa_thread_atexit_impl was introduced in Android 6.0
+ # https://android.googlesource.com/platform/bionic/+/main/libc/libc.map.txt#16
+ IF (ANDROID_API >= 23)
+ CFLAGS(
+ -DHAVE___CXA_THREAD_ATEXIT_IMPL
+ )
+ ENDIF()
+ELSE()
+ # As of 1.2.3, musl libc does not provide __cxa_thread_atexit_impl
+ IF (NOT MUSL)
+ CFLAGS(
+ -DHAVE___CXA_THREAD_ATEXIT_IMPL
+ )
+ ENDIF()
ENDIF()
IF (OS_EMSCRIPTEN AND ARCH_WASM64)
diff --git a/contrib/libs/cxxsupp/openmp/.yandex_meta/override.nix b/contrib/libs/cxxsupp/openmp/.yandex_meta/override.nix
index ea2b3d3c96e..877e037ad87 100644
--- a/contrib/libs/cxxsupp/openmp/.yandex_meta/override.nix
+++ b/contrib/libs/cxxsupp/openmp/.yandex_meta/override.nix
@@ -1,12 +1,12 @@
pkgs: attrs: with pkgs; with attrs; rec {
pname = "openmp";
- version = "21.1.0";
+ version = "21.1.1";
src = fetchFromGitHub {
owner = "llvm";
repo = "llvm-project";
rev = "llvmorg-${version}";
- hash = "sha256-4DLEZuhREHMl2t0f1iqvXSRSE5VBMVxd94Tj4m8Yf9s=";
+ hash = "sha256-IB9Z3bIMwfgw2W2Vxo89CmtCM9DfOyV2Ei64nqgHrgc=";
};
buildInputs = [ pkgs.python3 ];
diff --git a/contrib/libs/cxxsupp/openmp/ya.make b/contrib/libs/cxxsupp/openmp/ya.make
index a201f724c57..011bd150948 100644
--- a/contrib/libs/cxxsupp/openmp/ya.make
+++ b/contrib/libs/cxxsupp/openmp/ya.make
@@ -12,9 +12,9 @@ LICENSE(
LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
-VERSION(21.1.0)
+VERSION(21.1.1)
-ORIGINAL_SOURCE(https://github.com/llvm/llvm-project/archive/llvmorg-21.1.0.tar.gz)
+ORIGINAL_SOURCE(https://github.com/llvm/llvm-project/archive/llvmorg-21.1.1.tar.gz)
ADDINCL(
GLOBAL contrib/libs/cxxsupp/openmp
diff --git a/contrib/libs/fmt/include/fmt/format.h b/contrib/libs/fmt/include/fmt/format.h
index 7d18edf0bb7..ea102a8fec9 100644
--- a/contrib/libs/fmt/include/fmt/format.h
+++ b/contrib/libs/fmt/include/fmt/format.h
@@ -3033,14 +3033,14 @@ constexpr auto operator""_a()
return {};
}
# else
-constexpr auto operator"" _a(const char* s, size_t) -> detail::udl_arg<char> {
+constexpr auto operator""_a(const char* s, size_t) -> detail::udl_arg<char> {
return {s};
}
# endif
// DEPRECATED!
// User-defined literal equivalent of fmt::format.
-FMT_DEPRECATED constexpr auto operator"" _format(const char* s, size_t n)
+FMT_DEPRECATED constexpr auto operator""_format(const char* s, size_t n)
-> detail::udl_formatter<char> {
return {{s, n}};
}
diff --git a/contrib/libs/fmt/include/fmt/xchar.h b/contrib/libs/fmt/include/fmt/xchar.h
index 55825077f8e..56a893f95c0 100644
--- a/contrib/libs/fmt/include/fmt/xchar.h
+++ b/contrib/libs/fmt/include/fmt/xchar.h
@@ -47,13 +47,13 @@ constexpr format_arg_store<wformat_context, Args...> make_wformat_args(
}
inline namespace literals {
-constexpr auto operator"" _format(const wchar_t* s, size_t n)
+constexpr auto operator""_format(const wchar_t* s, size_t n)
-> detail::udl_formatter<wchar_t> {
return {{s, n}};
}
#if FMT_USE_USER_DEFINED_LITERALS && !FMT_USE_NONTYPE_TEMPLATE_PARAMETERS
-constexpr detail::udl_arg<wchar_t> operator"" _a(const wchar_t* s, size_t) {
+constexpr detail::udl_arg<wchar_t> operator""_a(const wchar_t* s, size_t) {
return {s};
}
#endif
diff --git a/contrib/libs/fmt/patches/03-deprecated-literal-operator.sh b/contrib/libs/fmt/patches/03-deprecated-literal-operator.sh
new file mode 100644
index 00000000000..cc49db794f6
--- /dev/null
+++ b/contrib/libs/fmt/patches/03-deprecated-literal-operator.sh
@@ -0,0 +1,3 @@
+set -xue
+sed -e 's|operator"" |operator""|g' include/fmt/format.h -i
+sed -e 's|operator"" |operator""|g' include/fmt/xchar.h -i
diff --git a/contrib/libs/libfuzzer/.yandex_meta/override.nix b/contrib/libs/libfuzzer/.yandex_meta/override.nix
index 39a56cb01f3..97028954c8a 100644
--- a/contrib/libs/libfuzzer/.yandex_meta/override.nix
+++ b/contrib/libs/libfuzzer/.yandex_meta/override.nix
@@ -1,11 +1,11 @@
pkgs: attrs: with pkgs; with attrs; rec {
- version = "21.1.0";
+ version = "21.1.1";
src = fetchFromGitHub {
owner = "llvm";
repo = "llvm-project";
rev = "llvmorg-${version}";
- hash = "sha256-4DLEZuhREHMl2t0f1iqvXSRSE5VBMVxd94Tj4m8Yf9s=";
+ hash = "sha256-IB9Z3bIMwfgw2W2Vxo89CmtCM9DfOyV2Ei64nqgHrgc=";
};
sourceRoot = "source/compiler-rt";
diff --git a/contrib/libs/libfuzzer/lib/fuzzer/afl/ya.make b/contrib/libs/libfuzzer/lib/fuzzer/afl/ya.make
index 971906fa807..1c05725c76b 100644
--- a/contrib/libs/libfuzzer/lib/fuzzer/afl/ya.make
+++ b/contrib/libs/libfuzzer/lib/fuzzer/afl/ya.make
@@ -8,7 +8,7 @@ LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
SUBSCRIBER(g:cpp-contrib)
-VERSION(21.1.0)
+VERSION(21.1.1)
PEERDIR(
contrib/libs/afl/llvm_mode
diff --git a/contrib/libs/libfuzzer/ya.make b/contrib/libs/libfuzzer/ya.make
index e609fcaf2c6..faa88619d86 100644
--- a/contrib/libs/libfuzzer/ya.make
+++ b/contrib/libs/libfuzzer/ya.make
@@ -12,9 +12,9 @@ LICENSE(
LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
-VERSION(21.1.0)
+VERSION(21.1.1)
-ORIGINAL_SOURCE(https://github.com/llvm/llvm-project/archive/llvmorg-21.1.0.tar.gz)
+ORIGINAL_SOURCE(https://github.com/llvm/llvm-project/archive/llvmorg-21.1.1.tar.gz)
SET(SANITIZER_CFLAGS)
diff --git a/contrib/libs/libunwind/.yandex_meta/override.nix b/contrib/libs/libunwind/.yandex_meta/override.nix
index 62a744391ac..1c00f543f7f 100644
--- a/contrib/libs/libunwind/.yandex_meta/override.nix
+++ b/contrib/libs/libunwind/.yandex_meta/override.nix
@@ -1,11 +1,11 @@
pkgs: attrs: with pkgs; with attrs; rec {
- version = "21.1.0";
+ version = "21.1.1";
src = fetchFromGitHub {
owner = "llvm";
repo = "llvm-project";
rev = "llvmorg-${version}";
- hash = "sha256-4DLEZuhREHMl2t0f1iqvXSRSE5VBMVxd94Tj4m8Yf9s=";
+ hash = "sha256-IB9Z3bIMwfgw2W2Vxo89CmtCM9DfOyV2Ei64nqgHrgc=";
};
patches = [];
diff --git a/contrib/libs/libunwind/ya.make b/contrib/libs/libunwind/ya.make
index b3178771252..9e0857cc44d 100644
--- a/contrib/libs/libunwind/ya.make
+++ b/contrib/libs/libunwind/ya.make
@@ -11,9 +11,9 @@ LICENSE(
LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
-VERSION(21.1.0)
+VERSION(21.1.1)
-ORIGINAL_SOURCE(https://github.com/llvm/llvm-project/archive/llvmorg-21.1.0.tar.gz)
+ORIGINAL_SOURCE(https://github.com/llvm/llvm-project/archive/llvmorg-21.1.1.tar.gz)
PEERDIR(
library/cpp/sanitizer/include
diff --git a/contrib/libs/llvm/flang-rt/.yandex_meta/__init__.py b/contrib/libs/llvm/flang-rt/.yandex_meta/__init__.py
new file mode 100644
index 00000000000..f951e7a4800
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/.yandex_meta/__init__.py
@@ -0,0 +1,38 @@
+from devtools.yamaker.platform_macros import LLVM_VERSION
+from devtools.yamaker.project import CMakeNinjaNixProject
+
+
+def post_install(self):
+ with self.yamakes["."] as flang_rt:
+ flang_rt.before(
+ "END",
+ """
+ IF (OS_WINDOWS)
+ LDFLAGS(
+ /LIBPATH:${ARCADIA_ROOT}/build/essentials/flang-empty-runtimes
+ )
+ ENDIF()
+ """,
+ )
+
+
+llvm_flang_rt = CMakeNinjaNixProject(
+ nixattr=f"llvmPackages_{LLVM_VERSION}.compiler-rt",
+ arcdir="contrib/libs/llvm/flang-rt",
+ cmake_subdir="runtimes",
+ build_subdir="runtimes/build",
+ flags=[
+ "-DLLVM_ENABLE_RUNTIMES=flang-rt",
+ ],
+ copy_sources=[
+ "flang/include/flang/Common/windows-include.h",
+ ],
+ disable_includes=[
+ "stdfloat",
+ "cuda/",
+ ],
+ platform_dispatchers=[
+ "flang-rt/config.h",
+ ],
+ post_install=post_install,
+)
diff --git a/contrib/libs/llvm/flang-rt/.yandex_meta/devtools.copyrights.report b/contrib/libs/llvm/flang-rt/.yandex_meta/devtools.copyrights.report
new file mode 100644
index 00000000000..38779d45b8a
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/.yandex_meta/devtools.copyrights.report
@@ -0,0 +1,46 @@
+# File format ($ symbol means the beginning of a line):
+#
+# $ # this message
+# $ # =======================
+# $ # comments (all commentaries should starts with some number of spaces and # symbol)
+# $ IGNORE_FILES {file1.ext1} {file2.ext2} - (optional) ignore listed files when generating license macro and credits
+# $ RENAME {original license id} TO {new license id} # user comments - (optional) use {new license id} instead {original license id} in ya.make files
+# $ # user comments
+# $
+# ${action} {license id} {license text hash}
+# $BELONGS ./ya/make/file/relative/path/1/ya.make ./ya/make/2/ya.make
+# ${all_file_action} filename
+# $ # user commentaries (many lines)
+# $ generated description - files with this license, license text... (some number of lines that starts with some number of spaces, do not modify)
+# ${action} {license spdx} {license text hash}
+# $BELONGS ./ya/make/file/relative/path/3/ya.make
+# ${all_file_action} filename
+# $ # user commentaries
+# $ generated description
+# $ ...
+#
+# You can modify action, all_file_action and add commentaries
+# Available actions:
+# keep - keep license in contrib and use in credits
+# skip - skip license
+# remove - remove all files with this license
+# rename - save license text/links into licenses texts file, but not store SPDX into LINCENSE macro. You should store correct license id into devtools.license.spdx.txt file
+#
+# {all file action} records will be generated when license text contains filename that exists on filesystem (in contrib directory)
+# We suppose that that files can contain some license info
+# Available all file actions:
+# FILE_IGNORE - ignore file (do nothing)
+# FILE_INCLUDE - include all file data into licenses text file
+# =======================
+
+KEEP COPYRIGHT_SERVICE_LABEL 6889c51be687d2aa2ca198228ffada0d
+BELONGS ya.make
+ License text:
+ Copyright (c) 2003-2019 University of Illinois at Urbana-Champaign.
+ All rights reserved.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ LICENSE.TXT [242:243]
diff --git a/contrib/libs/llvm/flang-rt/.yandex_meta/devtools.licenses.report b/contrib/libs/llvm/flang-rt/.yandex_meta/devtools.licenses.report
new file mode 100644
index 00000000000..6b36c6c8b1d
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/.yandex_meta/devtools.licenses.report
@@ -0,0 +1,948 @@
+# File format ($ symbol means the beginning of a line):
+#
+# $ # this message
+# $ # =======================
+# $ # comments (all commentaries should starts with some number of spaces and # symbol)
+# $ IGNORE_FILES {file1.ext1} {file2.ext2} - (optional) ignore listed files when generating license macro and credits
+# $ RENAME {original license id} TO {new license id} # user comments - (optional) use {new license id} instead {original license id} in ya.make files
+# $ # user comments
+# $
+# ${action} {license id} {license text hash}
+# $BELONGS ./ya/make/file/relative/path/1/ya.make ./ya/make/2/ya.make
+# ${all_file_action} filename
+# $ # user commentaries (many lines)
+# $ generated description - files with this license, license text... (some number of lines that starts with some number of spaces, do not modify)
+# ${action} {license spdx} {license text hash}
+# $BELONGS ./ya/make/file/relative/path/3/ya.make
+# ${all_file_action} filename
+# $ # user commentaries
+# $ generated description
+# $ ...
+#
+# You can modify action, all_file_action and add commentaries
+# Available actions:
+# keep - keep license in contrib and use in credits
+# skip - skip license
+# remove - remove all files with this license
+# rename - save license text/links into licenses texts file, but not store SPDX into LINCENSE macro. You should store correct license id into devtools.license.spdx.txt file
+#
+# {all file action} records will be generated when license text contains filename that exists on filesystem (in contrib directory)
+# We suppose that that files can contain some license info
+# Available all file actions:
+# FILE_IGNORE - ignore file (do nothing)
+# FILE_INCLUDE - include all file data into licenses text file
+# =======================
+
+KEEP Apache-2.0 WITH LLVM-exception 3cd6ea1904395f4162edc527b90cadab
+BELONGS ya.make
+ License text:
+ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ Scancode info:
+ Original SPDX id: Apache-2.0
+ Score : 100.00
+ Match type : TAG
+ Links : http://www.apache.org/licenses/, http://www.apache.org/licenses/LICENSE-2.0, https://spdx.org/licenses/Apache-2.0
+ Files with this license:
+ flang-rt/README.md [5:5]
+ Scancode info:
+ Original SPDX id: LLVM-exception
+ Score : 100.00
+ Match type : TAG
+ Links : http://llvm.org/foundation/relicensing/LICENSE.txt, https://spdx.org/licenses/LLVM-exception
+ Files with this license:
+ flang-rt/README.md [5:5]
+
+KEEP Apache-2.0 WITH LLVM-exception 46de3ad957a7feef77f4d3a511e79b6a
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: Apache-2.0
+ Score : 99.69
+ Match type : TEXT
+ Links : http://www.apache.org/licenses/, http://www.apache.org/licenses/LICENSE-2.0, https://spdx.org/licenses/Apache-2.0
+ Files with this license:
+ flang-rt/LICENSE.TXT [2:205]
+ flang/LICENSE.TXT [2:205]
+
+KEEP Apache-2.0 WITH LLVM-exception 705a75a25bce12b12334e8fc577d8a46
+BELONGS ya.make
+ License text:
+ * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+ * See https://llvm.org/LICENSE.txt for license information.
+ Scancode info:
+ Original SPDX id: Apache-2.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.apache.org/licenses/, http://www.apache.org/licenses/LICENSE-2.0, https://spdx.org/licenses/Apache-2.0
+ Files with this license:
+ flang-rt/config-linux.h [3:4]
+ flang-rt/lib/runtime/complex-reduction.c [3:4]
+ flang-rt/lib/runtime/complex-reduction.h [3:4]
+ flang-rt/lib/runtime/environment-default-list.h [3:4]
+ flang/include/flang/Common/ISO_Fortran_binding_wrapper.h [3:4]
+ flang/include/flang/Common/api-attrs.h [3:4]
+ flang/include/flang/Common/float128.h [3:4]
+ flang/include/flang/Common/float80.h [3:4]
+ flang/include/flang/Decimal/decimal.h [3:4]
+ flang/include/flang/ISO_Fortran_binding.h [3:4]
+ flang/include/flang/Runtime/entry-names.h [3:4]
+ flang/include/flang/Runtime/magic-numbers.h [3:4]
+ Scancode info:
+ Original SPDX id: LLVM-exception
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://llvm.org/foundation/relicensing/LICENSE.txt, https://spdx.org/licenses/LLVM-exception
+ Files with this license:
+ flang-rt/config-linux.h [3:4]
+ flang-rt/lib/runtime/complex-reduction.c [3:4]
+ flang-rt/lib/runtime/complex-reduction.h [3:4]
+ flang-rt/lib/runtime/environment-default-list.h [3:4]
+ flang/include/flang/Common/ISO_Fortran_binding_wrapper.h [3:4]
+ flang/include/flang/Common/api-attrs.h [3:4]
+ flang/include/flang/Common/float128.h [3:4]
+ flang/include/flang/Common/float80.h [3:4]
+ flang/include/flang/Decimal/decimal.h [3:4]
+ flang/include/flang/ISO_Fortran_binding.h [3:4]
+ flang/include/flang/Runtime/entry-names.h [3:4]
+ flang/include/flang/Runtime/magic-numbers.h [3:4]
+
+KEEP Apache-2.0 WITH LLVM-exception 755ab7da3ff8c5d6ae90bdbebd177e49
+BELONGS ya.make
+ License text:
+ // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+ // See https://llvm.org/LICENSE.txt for license information.
+ Scancode info:
+ Original SPDX id: Apache-2.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.apache.org/licenses/, http://www.apache.org/licenses/LICENSE-2.0, https://spdx.org/licenses/Apache-2.0
+ Files with this license:
+ flang-rt/include/flang-rt/runtime/allocator-registry.h [3:4]
+ flang-rt/include/flang-rt/runtime/array-constructor.h [3:4]
+ flang-rt/include/flang-rt/runtime/assign-impl.h [3:4]
+ flang-rt/include/flang-rt/runtime/buffer.h [3:4]
+ flang-rt/include/flang-rt/runtime/connection.h [3:4]
+ flang-rt/include/flang-rt/runtime/derived.h [3:4]
+ flang-rt/include/flang-rt/runtime/descriptor.h [3:4]
+ flang-rt/include/flang-rt/runtime/emit-encoded.h [3:4]
+ flang-rt/include/flang-rt/runtime/environment.h [3:4]
+ flang-rt/include/flang-rt/runtime/file.h [3:4]
+ flang-rt/include/flang-rt/runtime/format-implementation.h [3:4]
+ flang-rt/include/flang-rt/runtime/format.h [3:4]
+ flang-rt/include/flang-rt/runtime/internal-unit.h [3:4]
+ flang-rt/include/flang-rt/runtime/io-error.h [3:4]
+ flang-rt/include/flang-rt/runtime/io-stmt.h [3:4]
+ flang-rt/include/flang-rt/runtime/lock.h [3:4]
+ flang-rt/include/flang-rt/runtime/memory.h [3:4]
+ flang-rt/include/flang-rt/runtime/namelist.h [3:4]
+ flang-rt/include/flang-rt/runtime/non-tbp-dio.h [3:4]
+ flang-rt/include/flang-rt/runtime/numeric-templates.h [3:4]
+ flang-rt/include/flang-rt/runtime/random-templates.h [3:4]
+ flang-rt/include/flang-rt/runtime/reduction-templates.h [3:4]
+ flang-rt/include/flang-rt/runtime/stat.h [3:4]
+ flang-rt/include/flang-rt/runtime/terminator.h [3:4]
+ flang-rt/include/flang-rt/runtime/tools.h [3:4]
+ flang-rt/include/flang-rt/runtime/type-code.h [3:4]
+ flang-rt/include/flang-rt/runtime/type-info.h [3:4]
+ flang-rt/include/flang-rt/runtime/utf.h [3:4]
+ flang-rt/include/flang-rt/runtime/work-queue.h [3:4]
+ flang-rt/lib/runtime/ISO_Fortran_binding.cpp [3:4]
+ flang-rt/lib/runtime/ISO_Fortran_util.h [3:4]
+ flang-rt/lib/runtime/allocatable.cpp [3:4]
+ flang-rt/lib/runtime/allocator-registry.cpp [3:4]
+ flang-rt/lib/runtime/array-constructor.cpp [3:4]
+ flang-rt/lib/runtime/assign.cpp [3:4]
+ flang-rt/lib/runtime/buffer.cpp [3:4]
+ flang-rt/lib/runtime/character.cpp [3:4]
+ flang-rt/lib/runtime/command.cpp [3:4]
+ flang-rt/lib/runtime/complex-powi.cpp [3:4]
+ flang-rt/lib/runtime/connection.cpp [3:4]
+ flang-rt/lib/runtime/copy.cpp [3:4]
+ flang-rt/lib/runtime/copy.h [3:4]
+ flang-rt/lib/runtime/derived-api.cpp [3:4]
+ flang-rt/lib/runtime/derived.cpp [3:4]
+ flang-rt/lib/runtime/descriptor-io.cpp [3:4]
+ flang-rt/lib/runtime/descriptor-io.h [3:4]
+ flang-rt/lib/runtime/descriptor.cpp [3:4]
+ flang-rt/lib/runtime/dot-product.cpp [3:4]
+ flang-rt/lib/runtime/edit-input.cpp [3:4]
+ flang-rt/lib/runtime/edit-input.h [3:4]
+ flang-rt/lib/runtime/edit-output.cpp [3:4]
+ flang-rt/lib/runtime/edit-output.h [3:4]
+ flang-rt/lib/runtime/environment.cpp [3:4]
+ flang-rt/lib/runtime/exceptions.cpp [3:4]
+ flang-rt/lib/runtime/execute.cpp [3:4]
+ flang-rt/lib/runtime/extensions.cpp [3:4]
+ flang-rt/lib/runtime/external-unit.cpp [3:4]
+ flang-rt/lib/runtime/extrema.cpp [3:4]
+ flang-rt/lib/runtime/file.cpp [3:4]
+ flang-rt/lib/runtime/findloc.cpp [3:4]
+ flang-rt/lib/runtime/format.cpp [3:4]
+ flang-rt/lib/runtime/inquiry.cpp [3:4]
+ flang-rt/lib/runtime/internal-unit.cpp [3:4]
+ flang-rt/lib/runtime/io-api-common.h [3:4]
+ flang-rt/lib/runtime/io-api-minimal.cpp [3:4]
+ flang-rt/lib/runtime/io-api.cpp [3:4]
+ flang-rt/lib/runtime/io-error.cpp [3:4]
+ flang-rt/lib/runtime/io-stmt.cpp [3:4]
+ flang-rt/lib/runtime/iostat.cpp [3:4]
+ flang-rt/lib/runtime/main.cpp [3:4]
+ flang-rt/lib/runtime/matmul-transpose.cpp [3:4]
+ flang-rt/lib/runtime/matmul.cpp [3:4]
+ flang-rt/lib/runtime/memory.cpp [3:4]
+ flang-rt/lib/runtime/misc-intrinsic.cpp [3:4]
+ flang-rt/lib/runtime/namelist.cpp [3:4]
+ flang-rt/lib/runtime/non-tbp-dio.cpp [3:4]
+ flang-rt/lib/runtime/numeric.cpp [3:4]
+ flang-rt/lib/runtime/pointer.cpp [3:4]
+ flang-rt/lib/runtime/product.cpp [3:4]
+ flang-rt/lib/runtime/pseudo-unit.cpp [3:4]
+ flang-rt/lib/runtime/ragged.cpp [3:4]
+ flang-rt/lib/runtime/random.cpp [3:4]
+ flang-rt/lib/runtime/reduce.cpp [3:4]
+ flang-rt/lib/runtime/reduction.cpp [3:4]
+ flang-rt/lib/runtime/stack.h [3:4]
+ flang-rt/lib/runtime/stat.cpp [3:4]
+ flang-rt/lib/runtime/stop.cpp [3:4]
+ flang-rt/lib/runtime/sum.cpp [3:4]
+ flang-rt/lib/runtime/support.cpp [3:4]
+ flang-rt/lib/runtime/temporary-stack.cpp [3:4]
+ flang-rt/lib/runtime/terminator.cpp [3:4]
+ flang-rt/lib/runtime/time-intrinsic.cpp [3:4]
+ flang-rt/lib/runtime/tools.cpp [3:4]
+ flang-rt/lib/runtime/transformational.cpp [3:4]
+ flang-rt/lib/runtime/type-code.cpp [3:4]
+ flang-rt/lib/runtime/type-info.cpp [3:4]
+ flang-rt/lib/runtime/unit-map.cpp [3:4]
+ flang-rt/lib/runtime/unit-map.h [3:4]
+ flang-rt/lib/runtime/unit.cpp [3:4]
+ flang-rt/lib/runtime/unit.h [3:4]
+ flang-rt/lib/runtime/utf.cpp [3:4]
+ flang-rt/lib/runtime/work-queue.cpp [3:4]
+ flang/include/flang/Common/Fortran-consts.h [3:4]
+ flang/include/flang/Common/bit-population-count.h [3:4]
+ flang/include/flang/Common/constexpr-bitset.h [3:4]
+ flang/include/flang/Common/enum-class.h [3:4]
+ flang/include/flang/Common/enum-set.h [3:4]
+ flang/include/flang/Common/erfc-scaled.h [3:4]
+ flang/include/flang/Common/fast-int-set.h [3:4]
+ flang/include/flang/Common/format.h [3:4]
+ flang/include/flang/Common/idioms.h [3:4]
+ flang/include/flang/Common/leading-zero-bit-count.h [3:4]
+ flang/include/flang/Common/optional.h [3:4]
+ flang/include/flang/Common/real.h [3:4]
+ flang/include/flang/Common/reference-wrapper.h [3:4]
+ flang/include/flang/Common/restorer.h [3:4]
+ flang/include/flang/Common/type-kinds.h [3:4]
+ flang/include/flang/Common/uint128.h [3:4]
+ flang/include/flang/Common/variant.h [3:4]
+ flang/include/flang/Common/visit.h [3:4]
+ flang/include/flang/Common/windows-include.h [3:4]
+ flang/include/flang/Decimal/binary-floating-point.h [3:4]
+ flang/include/flang/Runtime/allocatable.h [3:4]
+ flang/include/flang/Runtime/allocator-registry-consts.h [3:4]
+ flang/include/flang/Runtime/array-constructor-consts.h [3:4]
+ flang/include/flang/Runtime/assign.h [3:4]
+ flang/include/flang/Runtime/c-or-cpp.h [3:4]
+ flang/include/flang/Runtime/character.h [3:4]
+ flang/include/flang/Runtime/command.h [3:4]
+ flang/include/flang/Runtime/complex.h [3:4]
+ flang/include/flang/Runtime/cpp-type.h [3:4]
+ flang/include/flang/Runtime/derived-api.h [3:4]
+ flang/include/flang/Runtime/descriptor-consts.h [3:4]
+ flang/include/flang/Runtime/exceptions.h [3:4]
+ flang/include/flang/Runtime/execute.h [3:4]
+ flang/include/flang/Runtime/extensions.h [3:4]
+ flang/include/flang/Runtime/freestanding-tools.h [3:4]
+ flang/include/flang/Runtime/inquiry.h [3:4]
+ flang/include/flang/Runtime/io-api.h [3:4]
+ flang/include/flang/Runtime/iostat-consts.h [3:4]
+ flang/include/flang/Runtime/iostat.h [3:4]
+ flang/include/flang/Runtime/main.h [3:4]
+ flang/include/flang/Runtime/matmul-instances.inc [3:4]
+ flang/include/flang/Runtime/matmul-transpose.h [3:4]
+ flang/include/flang/Runtime/matmul.h [3:4]
+ flang/include/flang/Runtime/misc-intrinsic.h [3:4]
+ flang/include/flang/Runtime/numeric.h [3:4]
+ flang/include/flang/Runtime/pointer.h [3:4]
+ flang/include/flang/Runtime/ragged.h [3:4]
+ flang/include/flang/Runtime/random.h [3:4]
+ flang/include/flang/Runtime/reduce.h [3:4]
+ flang/include/flang/Runtime/reduction.h [3:4]
+ flang/include/flang/Runtime/stop.h [3:4]
+ flang/include/flang/Runtime/support.h [3:4]
+ flang/include/flang/Runtime/temporary-stack.h [3:4]
+ flang/include/flang/Runtime/time-intrinsic.h [3:4]
+ flang/include/flang/Runtime/transformational.h [3:4]
+ flang/lib/Decimal/big-radix-floating-point.h [3:4]
+ flang/lib/Decimal/binary-to-decimal.cpp [3:4]
+ flang/lib/Decimal/decimal-to-binary.cpp [3:4]
+ Scancode info:
+ Original SPDX id: LLVM-exception
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://llvm.org/foundation/relicensing/LICENSE.txt, https://spdx.org/licenses/LLVM-exception
+ Files with this license:
+ flang-rt/include/flang-rt/runtime/allocator-registry.h [3:4]
+ flang-rt/include/flang-rt/runtime/array-constructor.h [3:4]
+ flang-rt/include/flang-rt/runtime/assign-impl.h [3:4]
+ flang-rt/include/flang-rt/runtime/buffer.h [3:4]
+ flang-rt/include/flang-rt/runtime/connection.h [3:4]
+ flang-rt/include/flang-rt/runtime/derived.h [3:4]
+ flang-rt/include/flang-rt/runtime/descriptor.h [3:4]
+ flang-rt/include/flang-rt/runtime/emit-encoded.h [3:4]
+ flang-rt/include/flang-rt/runtime/environment.h [3:4]
+ flang-rt/include/flang-rt/runtime/file.h [3:4]
+ flang-rt/include/flang-rt/runtime/format-implementation.h [3:4]
+ flang-rt/include/flang-rt/runtime/format.h [3:4]
+ flang-rt/include/flang-rt/runtime/internal-unit.h [3:4]
+ flang-rt/include/flang-rt/runtime/io-error.h [3:4]
+ flang-rt/include/flang-rt/runtime/io-stmt.h [3:4]
+ flang-rt/include/flang-rt/runtime/lock.h [3:4]
+ flang-rt/include/flang-rt/runtime/memory.h [3:4]
+ flang-rt/include/flang-rt/runtime/namelist.h [3:4]
+ flang-rt/include/flang-rt/runtime/non-tbp-dio.h [3:4]
+ flang-rt/include/flang-rt/runtime/numeric-templates.h [3:4]
+ flang-rt/include/flang-rt/runtime/random-templates.h [3:4]
+ flang-rt/include/flang-rt/runtime/reduction-templates.h [3:4]
+ flang-rt/include/flang-rt/runtime/stat.h [3:4]
+ flang-rt/include/flang-rt/runtime/terminator.h [3:4]
+ flang-rt/include/flang-rt/runtime/tools.h [3:4]
+ flang-rt/include/flang-rt/runtime/type-code.h [3:4]
+ flang-rt/include/flang-rt/runtime/type-info.h [3:4]
+ flang-rt/include/flang-rt/runtime/utf.h [3:4]
+ flang-rt/include/flang-rt/runtime/work-queue.h [3:4]
+ flang-rt/lib/runtime/ISO_Fortran_binding.cpp [3:4]
+ flang-rt/lib/runtime/ISO_Fortran_util.h [3:4]
+ flang-rt/lib/runtime/allocatable.cpp [3:4]
+ flang-rt/lib/runtime/allocator-registry.cpp [3:4]
+ flang-rt/lib/runtime/array-constructor.cpp [3:4]
+ flang-rt/lib/runtime/assign.cpp [3:4]
+ flang-rt/lib/runtime/buffer.cpp [3:4]
+ flang-rt/lib/runtime/character.cpp [3:4]
+ flang-rt/lib/runtime/command.cpp [3:4]
+ flang-rt/lib/runtime/complex-powi.cpp [3:4]
+ flang-rt/lib/runtime/connection.cpp [3:4]
+ flang-rt/lib/runtime/copy.cpp [3:4]
+ flang-rt/lib/runtime/copy.h [3:4]
+ flang-rt/lib/runtime/derived-api.cpp [3:4]
+ flang-rt/lib/runtime/derived.cpp [3:4]
+ flang-rt/lib/runtime/descriptor-io.cpp [3:4]
+ flang-rt/lib/runtime/descriptor-io.h [3:4]
+ flang-rt/lib/runtime/descriptor.cpp [3:4]
+ flang-rt/lib/runtime/dot-product.cpp [3:4]
+ flang-rt/lib/runtime/edit-input.cpp [3:4]
+ flang-rt/lib/runtime/edit-input.h [3:4]
+ flang-rt/lib/runtime/edit-output.cpp [3:4]
+ flang-rt/lib/runtime/edit-output.h [3:4]
+ flang-rt/lib/runtime/environment.cpp [3:4]
+ flang-rt/lib/runtime/exceptions.cpp [3:4]
+ flang-rt/lib/runtime/execute.cpp [3:4]
+ flang-rt/lib/runtime/extensions.cpp [3:4]
+ flang-rt/lib/runtime/external-unit.cpp [3:4]
+ flang-rt/lib/runtime/extrema.cpp [3:4]
+ flang-rt/lib/runtime/file.cpp [3:4]
+ flang-rt/lib/runtime/findloc.cpp [3:4]
+ flang-rt/lib/runtime/format.cpp [3:4]
+ flang-rt/lib/runtime/inquiry.cpp [3:4]
+ flang-rt/lib/runtime/internal-unit.cpp [3:4]
+ flang-rt/lib/runtime/io-api-common.h [3:4]
+ flang-rt/lib/runtime/io-api-minimal.cpp [3:4]
+ flang-rt/lib/runtime/io-api.cpp [3:4]
+ flang-rt/lib/runtime/io-error.cpp [3:4]
+ flang-rt/lib/runtime/io-stmt.cpp [3:4]
+ flang-rt/lib/runtime/iostat.cpp [3:4]
+ flang-rt/lib/runtime/main.cpp [3:4]
+ flang-rt/lib/runtime/matmul-transpose.cpp [3:4]
+ flang-rt/lib/runtime/matmul.cpp [3:4]
+ flang-rt/lib/runtime/memory.cpp [3:4]
+ flang-rt/lib/runtime/misc-intrinsic.cpp [3:4]
+ flang-rt/lib/runtime/namelist.cpp [3:4]
+ flang-rt/lib/runtime/non-tbp-dio.cpp [3:4]
+ flang-rt/lib/runtime/numeric.cpp [3:4]
+ flang-rt/lib/runtime/pointer.cpp [3:4]
+ flang-rt/lib/runtime/product.cpp [3:4]
+ flang-rt/lib/runtime/pseudo-unit.cpp [3:4]
+ flang-rt/lib/runtime/ragged.cpp [3:4]
+ flang-rt/lib/runtime/random.cpp [3:4]
+ flang-rt/lib/runtime/reduce.cpp [3:4]
+ flang-rt/lib/runtime/reduction.cpp [3:4]
+ flang-rt/lib/runtime/stack.h [3:4]
+ flang-rt/lib/runtime/stat.cpp [3:4]
+ flang-rt/lib/runtime/stop.cpp [3:4]
+ flang-rt/lib/runtime/sum.cpp [3:4]
+ flang-rt/lib/runtime/support.cpp [3:4]
+ flang-rt/lib/runtime/temporary-stack.cpp [3:4]
+ flang-rt/lib/runtime/terminator.cpp [3:4]
+ flang-rt/lib/runtime/time-intrinsic.cpp [3:4]
+ flang-rt/lib/runtime/tools.cpp [3:4]
+ flang-rt/lib/runtime/transformational.cpp [3:4]
+ flang-rt/lib/runtime/type-code.cpp [3:4]
+ flang-rt/lib/runtime/type-info.cpp [3:4]
+ flang-rt/lib/runtime/unit-map.cpp [3:4]
+ flang-rt/lib/runtime/unit-map.h [3:4]
+ flang-rt/lib/runtime/unit.cpp [3:4]
+ flang-rt/lib/runtime/unit.h [3:4]
+ flang-rt/lib/runtime/utf.cpp [3:4]
+ flang-rt/lib/runtime/work-queue.cpp [3:4]
+ flang/include/flang/Common/Fortran-consts.h [3:4]
+ flang/include/flang/Common/bit-population-count.h [3:4]
+ flang/include/flang/Common/constexpr-bitset.h [3:4]
+ flang/include/flang/Common/enum-class.h [3:4]
+ flang/include/flang/Common/enum-set.h [3:4]
+ flang/include/flang/Common/erfc-scaled.h [3:4]
+ flang/include/flang/Common/fast-int-set.h [3:4]
+ flang/include/flang/Common/format.h [3:4]
+ flang/include/flang/Common/idioms.h [3:4]
+ flang/include/flang/Common/leading-zero-bit-count.h [3:4]
+ flang/include/flang/Common/optional.h [3:4]
+ flang/include/flang/Common/real.h [3:4]
+ flang/include/flang/Common/reference-wrapper.h [3:4]
+ flang/include/flang/Common/restorer.h [3:4]
+ flang/include/flang/Common/type-kinds.h [3:4]
+ flang/include/flang/Common/uint128.h [3:4]
+ flang/include/flang/Common/variant.h [3:4]
+ flang/include/flang/Common/visit.h [3:4]
+ flang/include/flang/Common/windows-include.h [3:4]
+ flang/include/flang/Decimal/binary-floating-point.h [3:4]
+ flang/include/flang/Runtime/allocatable.h [3:4]
+ flang/include/flang/Runtime/allocator-registry-consts.h [3:4]
+ flang/include/flang/Runtime/array-constructor-consts.h [3:4]
+ flang/include/flang/Runtime/assign.h [3:4]
+ flang/include/flang/Runtime/c-or-cpp.h [3:4]
+ flang/include/flang/Runtime/character.h [3:4]
+ flang/include/flang/Runtime/command.h [3:4]
+ flang/include/flang/Runtime/complex.h [3:4]
+ flang/include/flang/Runtime/cpp-type.h [3:4]
+ flang/include/flang/Runtime/derived-api.h [3:4]
+ flang/include/flang/Runtime/descriptor-consts.h [3:4]
+ flang/include/flang/Runtime/exceptions.h [3:4]
+ flang/include/flang/Runtime/execute.h [3:4]
+ flang/include/flang/Runtime/extensions.h [3:4]
+ flang/include/flang/Runtime/freestanding-tools.h [3:4]
+ flang/include/flang/Runtime/inquiry.h [3:4]
+ flang/include/flang/Runtime/io-api.h [3:4]
+ flang/include/flang/Runtime/iostat-consts.h [3:4]
+ flang/include/flang/Runtime/iostat.h [3:4]
+ flang/include/flang/Runtime/main.h [3:4]
+ flang/include/flang/Runtime/matmul-instances.inc [3:4]
+ flang/include/flang/Runtime/matmul-transpose.h [3:4]
+ flang/include/flang/Runtime/matmul.h [3:4]
+ flang/include/flang/Runtime/misc-intrinsic.h [3:4]
+ flang/include/flang/Runtime/numeric.h [3:4]
+ flang/include/flang/Runtime/pointer.h [3:4]
+ flang/include/flang/Runtime/ragged.h [3:4]
+ flang/include/flang/Runtime/random.h [3:4]
+ flang/include/flang/Runtime/reduce.h [3:4]
+ flang/include/flang/Runtime/reduction.h [3:4]
+ flang/include/flang/Runtime/stop.h [3:4]
+ flang/include/flang/Runtime/support.h [3:4]
+ flang/include/flang/Runtime/temporary-stack.h [3:4]
+ flang/include/flang/Runtime/time-intrinsic.h [3:4]
+ flang/include/flang/Runtime/transformational.h [3:4]
+ flang/lib/Decimal/big-radix-floating-point.h [3:4]
+ flang/lib/Decimal/binary-to-decimal.cpp [3:4]
+ flang/lib/Decimal/decimal-to-binary.cpp [3:4]
+
+KEEP NCSA 7e1c6e0177b0a462d79445a1e2d85892
+BELONGS ya.make
+ License text:
+ Legacy LLVM License (https://llvm.org/docs/DeveloperPolicy.html#legacy):
+ ==============================================================================
+ University of Illinois/NCSA
+ Open Source License
+ Scancode info:
+ Original SPDX id: NCSA
+ Score : 100.00
+ Match type : REFERENCE
+ Links : http://www.otm.illinois.edu/faculty/forms/opensource.asp, https://spdx.org/licenses/NCSA
+ Files with this license:
+ LICENSE.TXT [237:240]
+
+KEEP Apache-2.0 WITH LLVM-exception 8494a9caed330d9a4f40e19cce7dc770
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: LLVM-exception
+ Score : 100.00
+ Match type : TEXT
+ Links : http://llvm.org/foundation/relicensing/LICENSE.txt, https://spdx.org/licenses/LLVM-exception
+ Files with this license:
+ LICENSE.TXT [208:222]
+ flang-rt/LICENSE.TXT [208:222]
+ flang/LICENSE.TXT [208:222]
+
+KEEP Apache-2.0 WITH LLVM-exception 920007a31ffdd1aecc6f9a8b12515826
+BELONGS ya.make
+ License text:
+ // The original source code is distributed under the Apache License v2.0
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-unknown-license-reference
+ Score : 11.00
+ Match type : INTRO
+ Links : https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/unknown-license-reference.LICENSE
+ Files with this license:
+ flang/include/flang/Common/reference-wrapper.h [14:14]
+
+KEEP Apache-2.0 WITH LLVM-exception 9ac77f65a898755c7eed97099caded94
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: Apache-2.0
+ Score : 100.00
+ Match type : TEXT
+ Links : http://www.apache.org/licenses/, http://www.apache.org/licenses/LICENSE-2.0, https://spdx.org/licenses/Apache-2.0
+ Files with this license:
+ LICENSE.TXT [5:205]
+
+KEEP NCSA b160d8bd561da097b0edd40b062e1c84
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: NCSA
+ Score : 100.00
+ Match type : TEXT
+ Links : http://www.otm.illinois.edu/faculty/forms/opensource.asp, https://spdx.org/licenses/NCSA
+ Files with this license:
+ LICENSE.TXT [253:278]
+
+KEEP Apache-2.0 WITH LLVM-exception b7566a1930e050e1090162bf1d543650
+BELONGS ya.make
+ License text:
+ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ Scancode info:
+ Original SPDX id: Apache-2.0
+ Score : 100.00
+ Match type : TAG
+ Links : http://www.apache.org/licenses/, http://www.apache.org/licenses/LICENSE-2.0, https://spdx.org/licenses/Apache-2.0
+ Files with this license:
+ flang-rt/include/flang-rt/runtime/allocator-registry.h [5:5]
+ flang-rt/include/flang-rt/runtime/array-constructor.h [5:5]
+ flang-rt/include/flang-rt/runtime/assign-impl.h [5:5]
+ flang-rt/include/flang-rt/runtime/buffer.h [5:5]
+ flang-rt/include/flang-rt/runtime/connection.h [5:5]
+ flang-rt/include/flang-rt/runtime/derived.h [5:5]
+ flang-rt/include/flang-rt/runtime/descriptor.h [5:5]
+ flang-rt/include/flang-rt/runtime/emit-encoded.h [5:5]
+ flang-rt/include/flang-rt/runtime/environment.h [5:5]
+ flang-rt/include/flang-rt/runtime/file.h [5:5]
+ flang-rt/include/flang-rt/runtime/format-implementation.h [5:5]
+ flang-rt/include/flang-rt/runtime/format.h [5:5]
+ flang-rt/include/flang-rt/runtime/internal-unit.h [5:5]
+ flang-rt/include/flang-rt/runtime/io-error.h [5:5]
+ flang-rt/include/flang-rt/runtime/io-stmt.h [5:5]
+ flang-rt/include/flang-rt/runtime/lock.h [5:5]
+ flang-rt/include/flang-rt/runtime/memory.h [5:5]
+ flang-rt/include/flang-rt/runtime/namelist.h [5:5]
+ flang-rt/include/flang-rt/runtime/non-tbp-dio.h [5:5]
+ flang-rt/include/flang-rt/runtime/numeric-templates.h [5:5]
+ flang-rt/include/flang-rt/runtime/random-templates.h [5:5]
+ flang-rt/include/flang-rt/runtime/reduction-templates.h [5:5]
+ flang-rt/include/flang-rt/runtime/stat.h [5:5]
+ flang-rt/include/flang-rt/runtime/terminator.h [5:5]
+ flang-rt/include/flang-rt/runtime/tools.h [5:5]
+ flang-rt/include/flang-rt/runtime/type-code.h [5:5]
+ flang-rt/include/flang-rt/runtime/type-info.h [5:5]
+ flang-rt/include/flang-rt/runtime/utf.h [5:5]
+ flang-rt/include/flang-rt/runtime/work-queue.h [5:5]
+ flang-rt/lib/runtime/ISO_Fortran_binding.cpp [5:5]
+ flang-rt/lib/runtime/ISO_Fortran_util.h [5:5]
+ flang-rt/lib/runtime/allocatable.cpp [5:5]
+ flang-rt/lib/runtime/allocator-registry.cpp [5:5]
+ flang-rt/lib/runtime/array-constructor.cpp [5:5]
+ flang-rt/lib/runtime/assign.cpp [5:5]
+ flang-rt/lib/runtime/buffer.cpp [5:5]
+ flang-rt/lib/runtime/character.cpp [5:5]
+ flang-rt/lib/runtime/command.cpp [5:5]
+ flang-rt/lib/runtime/complex-powi.cpp [5:5]
+ flang-rt/lib/runtime/connection.cpp [5:5]
+ flang-rt/lib/runtime/copy.cpp [5:5]
+ flang-rt/lib/runtime/copy.h [5:5]
+ flang-rt/lib/runtime/derived-api.cpp [5:5]
+ flang-rt/lib/runtime/derived.cpp [5:5]
+ flang-rt/lib/runtime/descriptor-io.cpp [5:5]
+ flang-rt/lib/runtime/descriptor-io.h [5:5]
+ flang-rt/lib/runtime/descriptor.cpp [5:5]
+ flang-rt/lib/runtime/dot-product.cpp [5:5]
+ flang-rt/lib/runtime/edit-input.cpp [5:5]
+ flang-rt/lib/runtime/edit-input.h [5:5]
+ flang-rt/lib/runtime/edit-output.cpp [5:5]
+ flang-rt/lib/runtime/edit-output.h [5:5]
+ flang-rt/lib/runtime/environment.cpp [5:5]
+ flang-rt/lib/runtime/exceptions.cpp [5:5]
+ flang-rt/lib/runtime/execute.cpp [5:5]
+ flang-rt/lib/runtime/extensions.cpp [5:5]
+ flang-rt/lib/runtime/external-unit.cpp [5:5]
+ flang-rt/lib/runtime/extrema.cpp [5:5]
+ flang-rt/lib/runtime/file.cpp [5:5]
+ flang-rt/lib/runtime/findloc.cpp [5:5]
+ flang-rt/lib/runtime/format.cpp [5:5]
+ flang-rt/lib/runtime/inquiry.cpp [5:5]
+ flang-rt/lib/runtime/internal-unit.cpp [5:5]
+ flang-rt/lib/runtime/io-api-common.h [5:5]
+ flang-rt/lib/runtime/io-api-minimal.cpp [5:5]
+ flang-rt/lib/runtime/io-api.cpp [5:5]
+ flang-rt/lib/runtime/io-error.cpp [5:5]
+ flang-rt/lib/runtime/io-stmt.cpp [5:5]
+ flang-rt/lib/runtime/iostat.cpp [5:5]
+ flang-rt/lib/runtime/main.cpp [5:5]
+ flang-rt/lib/runtime/matmul-transpose.cpp [5:5]
+ flang-rt/lib/runtime/matmul.cpp [5:5]
+ flang-rt/lib/runtime/memory.cpp [5:5]
+ flang-rt/lib/runtime/misc-intrinsic.cpp [5:5]
+ flang-rt/lib/runtime/namelist.cpp [5:5]
+ flang-rt/lib/runtime/non-tbp-dio.cpp [5:5]
+ flang-rt/lib/runtime/numeric.cpp [5:5]
+ flang-rt/lib/runtime/pointer.cpp [5:5]
+ flang-rt/lib/runtime/product.cpp [5:5]
+ flang-rt/lib/runtime/pseudo-unit.cpp [5:5]
+ flang-rt/lib/runtime/ragged.cpp [5:5]
+ flang-rt/lib/runtime/random.cpp [5:5]
+ flang-rt/lib/runtime/reduce.cpp [5:5]
+ flang-rt/lib/runtime/reduction.cpp [5:5]
+ flang-rt/lib/runtime/stack.h [5:5]
+ flang-rt/lib/runtime/stat.cpp [5:5]
+ flang-rt/lib/runtime/stop.cpp [5:5]
+ flang-rt/lib/runtime/sum.cpp [5:5]
+ flang-rt/lib/runtime/support.cpp [5:5]
+ flang-rt/lib/runtime/temporary-stack.cpp [5:5]
+ flang-rt/lib/runtime/terminator.cpp [5:5]
+ flang-rt/lib/runtime/time-intrinsic.cpp [5:5]
+ flang-rt/lib/runtime/tools.cpp [5:5]
+ flang-rt/lib/runtime/transformational.cpp [5:5]
+ flang-rt/lib/runtime/type-code.cpp [5:5]
+ flang-rt/lib/runtime/type-info.cpp [5:5]
+ flang-rt/lib/runtime/unit-map.cpp [5:5]
+ flang-rt/lib/runtime/unit-map.h [5:5]
+ flang-rt/lib/runtime/unit.cpp [5:5]
+ flang-rt/lib/runtime/unit.h [5:5]
+ flang-rt/lib/runtime/utf.cpp [5:5]
+ flang-rt/lib/runtime/work-queue.cpp [5:5]
+ flang/include/flang/Common/Fortran-consts.h [5:5]
+ flang/include/flang/Common/bit-population-count.h [5:5]
+ flang/include/flang/Common/constexpr-bitset.h [5:5]
+ flang/include/flang/Common/enum-class.h [5:5]
+ flang/include/flang/Common/enum-set.h [5:5]
+ flang/include/flang/Common/erfc-scaled.h [5:5]
+ flang/include/flang/Common/fast-int-set.h [5:5]
+ flang/include/flang/Common/format.h [5:5]
+ flang/include/flang/Common/idioms.h [5:5]
+ flang/include/flang/Common/leading-zero-bit-count.h [5:5]
+ flang/include/flang/Common/optional.h [5:5]
+ flang/include/flang/Common/real.h [5:5]
+ flang/include/flang/Common/reference-wrapper.h [5:5]
+ flang/include/flang/Common/restorer.h [5:5]
+ flang/include/flang/Common/type-kinds.h [5:5]
+ flang/include/flang/Common/uint128.h [5:5]
+ flang/include/flang/Common/variant.h [5:5]
+ flang/include/flang/Common/visit.h [5:5]
+ flang/include/flang/Common/windows-include.h [5:5]
+ flang/include/flang/Decimal/binary-floating-point.h [5:5]
+ flang/include/flang/Runtime/allocatable.h [5:5]
+ flang/include/flang/Runtime/allocator-registry-consts.h [5:5]
+ flang/include/flang/Runtime/array-constructor-consts.h [5:5]
+ flang/include/flang/Runtime/assign.h [5:5]
+ flang/include/flang/Runtime/c-or-cpp.h [5:5]
+ flang/include/flang/Runtime/character.h [5:5]
+ flang/include/flang/Runtime/command.h [5:5]
+ flang/include/flang/Runtime/complex.h [5:5]
+ flang/include/flang/Runtime/cpp-type.h [5:5]
+ flang/include/flang/Runtime/derived-api.h [5:5]
+ flang/include/flang/Runtime/descriptor-consts.h [5:5]
+ flang/include/flang/Runtime/exceptions.h [5:5]
+ flang/include/flang/Runtime/execute.h [5:5]
+ flang/include/flang/Runtime/extensions.h [5:5]
+ flang/include/flang/Runtime/freestanding-tools.h [5:5]
+ flang/include/flang/Runtime/inquiry.h [5:5]
+ flang/include/flang/Runtime/io-api.h [5:5]
+ flang/include/flang/Runtime/iostat-consts.h [5:5]
+ flang/include/flang/Runtime/iostat.h [5:5]
+ flang/include/flang/Runtime/main.h [5:5]
+ flang/include/flang/Runtime/matmul-instances.inc [5:5]
+ flang/include/flang/Runtime/matmul-transpose.h [5:5]
+ flang/include/flang/Runtime/matmul.h [5:5]
+ flang/include/flang/Runtime/misc-intrinsic.h [5:5]
+ flang/include/flang/Runtime/numeric.h [5:5]
+ flang/include/flang/Runtime/pointer.h [5:5]
+ flang/include/flang/Runtime/ragged.h [5:5]
+ flang/include/flang/Runtime/random.h [5:5]
+ flang/include/flang/Runtime/reduce.h [5:5]
+ flang/include/flang/Runtime/reduction.h [5:5]
+ flang/include/flang/Runtime/stop.h [5:5]
+ flang/include/flang/Runtime/support.h [5:5]
+ flang/include/flang/Runtime/temporary-stack.h [5:5]
+ flang/include/flang/Runtime/time-intrinsic.h [5:5]
+ flang/include/flang/Runtime/transformational.h [5:5]
+ flang/lib/Decimal/big-radix-floating-point.h [5:5]
+ flang/lib/Decimal/binary-to-decimal.cpp [5:5]
+ flang/lib/Decimal/decimal-to-binary.cpp [5:5]
+ Scancode info:
+ Original SPDX id: LLVM-exception
+ Score : 100.00
+ Match type : TAG
+ Links : http://llvm.org/foundation/relicensing/LICENSE.txt, https://spdx.org/licenses/LLVM-exception
+ Files with this license:
+ flang-rt/include/flang-rt/runtime/allocator-registry.h [5:5]
+ flang-rt/include/flang-rt/runtime/array-constructor.h [5:5]
+ flang-rt/include/flang-rt/runtime/assign-impl.h [5:5]
+ flang-rt/include/flang-rt/runtime/buffer.h [5:5]
+ flang-rt/include/flang-rt/runtime/connection.h [5:5]
+ flang-rt/include/flang-rt/runtime/derived.h [5:5]
+ flang-rt/include/flang-rt/runtime/descriptor.h [5:5]
+ flang-rt/include/flang-rt/runtime/emit-encoded.h [5:5]
+ flang-rt/include/flang-rt/runtime/environment.h [5:5]
+ flang-rt/include/flang-rt/runtime/file.h [5:5]
+ flang-rt/include/flang-rt/runtime/format-implementation.h [5:5]
+ flang-rt/include/flang-rt/runtime/format.h [5:5]
+ flang-rt/include/flang-rt/runtime/internal-unit.h [5:5]
+ flang-rt/include/flang-rt/runtime/io-error.h [5:5]
+ flang-rt/include/flang-rt/runtime/io-stmt.h [5:5]
+ flang-rt/include/flang-rt/runtime/lock.h [5:5]
+ flang-rt/include/flang-rt/runtime/memory.h [5:5]
+ flang-rt/include/flang-rt/runtime/namelist.h [5:5]
+ flang-rt/include/flang-rt/runtime/non-tbp-dio.h [5:5]
+ flang-rt/include/flang-rt/runtime/numeric-templates.h [5:5]
+ flang-rt/include/flang-rt/runtime/random-templates.h [5:5]
+ flang-rt/include/flang-rt/runtime/reduction-templates.h [5:5]
+ flang-rt/include/flang-rt/runtime/stat.h [5:5]
+ flang-rt/include/flang-rt/runtime/terminator.h [5:5]
+ flang-rt/include/flang-rt/runtime/tools.h [5:5]
+ flang-rt/include/flang-rt/runtime/type-code.h [5:5]
+ flang-rt/include/flang-rt/runtime/type-info.h [5:5]
+ flang-rt/include/flang-rt/runtime/utf.h [5:5]
+ flang-rt/include/flang-rt/runtime/work-queue.h [5:5]
+ flang-rt/lib/runtime/ISO_Fortran_binding.cpp [5:5]
+ flang-rt/lib/runtime/ISO_Fortran_util.h [5:5]
+ flang-rt/lib/runtime/allocatable.cpp [5:5]
+ flang-rt/lib/runtime/allocator-registry.cpp [5:5]
+ flang-rt/lib/runtime/array-constructor.cpp [5:5]
+ flang-rt/lib/runtime/assign.cpp [5:5]
+ flang-rt/lib/runtime/buffer.cpp [5:5]
+ flang-rt/lib/runtime/character.cpp [5:5]
+ flang-rt/lib/runtime/command.cpp [5:5]
+ flang-rt/lib/runtime/complex-powi.cpp [5:5]
+ flang-rt/lib/runtime/connection.cpp [5:5]
+ flang-rt/lib/runtime/copy.cpp [5:5]
+ flang-rt/lib/runtime/copy.h [5:5]
+ flang-rt/lib/runtime/derived-api.cpp [5:5]
+ flang-rt/lib/runtime/derived.cpp [5:5]
+ flang-rt/lib/runtime/descriptor-io.cpp [5:5]
+ flang-rt/lib/runtime/descriptor-io.h [5:5]
+ flang-rt/lib/runtime/descriptor.cpp [5:5]
+ flang-rt/lib/runtime/dot-product.cpp [5:5]
+ flang-rt/lib/runtime/edit-input.cpp [5:5]
+ flang-rt/lib/runtime/edit-input.h [5:5]
+ flang-rt/lib/runtime/edit-output.cpp [5:5]
+ flang-rt/lib/runtime/edit-output.h [5:5]
+ flang-rt/lib/runtime/environment.cpp [5:5]
+ flang-rt/lib/runtime/exceptions.cpp [5:5]
+ flang-rt/lib/runtime/execute.cpp [5:5]
+ flang-rt/lib/runtime/extensions.cpp [5:5]
+ flang-rt/lib/runtime/external-unit.cpp [5:5]
+ flang-rt/lib/runtime/extrema.cpp [5:5]
+ flang-rt/lib/runtime/file.cpp [5:5]
+ flang-rt/lib/runtime/findloc.cpp [5:5]
+ flang-rt/lib/runtime/format.cpp [5:5]
+ flang-rt/lib/runtime/inquiry.cpp [5:5]
+ flang-rt/lib/runtime/internal-unit.cpp [5:5]
+ flang-rt/lib/runtime/io-api-common.h [5:5]
+ flang-rt/lib/runtime/io-api-minimal.cpp [5:5]
+ flang-rt/lib/runtime/io-api.cpp [5:5]
+ flang-rt/lib/runtime/io-error.cpp [5:5]
+ flang-rt/lib/runtime/io-stmt.cpp [5:5]
+ flang-rt/lib/runtime/iostat.cpp [5:5]
+ flang-rt/lib/runtime/main.cpp [5:5]
+ flang-rt/lib/runtime/matmul-transpose.cpp [5:5]
+ flang-rt/lib/runtime/matmul.cpp [5:5]
+ flang-rt/lib/runtime/memory.cpp [5:5]
+ flang-rt/lib/runtime/misc-intrinsic.cpp [5:5]
+ flang-rt/lib/runtime/namelist.cpp [5:5]
+ flang-rt/lib/runtime/non-tbp-dio.cpp [5:5]
+ flang-rt/lib/runtime/numeric.cpp [5:5]
+ flang-rt/lib/runtime/pointer.cpp [5:5]
+ flang-rt/lib/runtime/product.cpp [5:5]
+ flang-rt/lib/runtime/pseudo-unit.cpp [5:5]
+ flang-rt/lib/runtime/ragged.cpp [5:5]
+ flang-rt/lib/runtime/random.cpp [5:5]
+ flang-rt/lib/runtime/reduce.cpp [5:5]
+ flang-rt/lib/runtime/reduction.cpp [5:5]
+ flang-rt/lib/runtime/stack.h [5:5]
+ flang-rt/lib/runtime/stat.cpp [5:5]
+ flang-rt/lib/runtime/stop.cpp [5:5]
+ flang-rt/lib/runtime/sum.cpp [5:5]
+ flang-rt/lib/runtime/support.cpp [5:5]
+ flang-rt/lib/runtime/temporary-stack.cpp [5:5]
+ flang-rt/lib/runtime/terminator.cpp [5:5]
+ flang-rt/lib/runtime/time-intrinsic.cpp [5:5]
+ flang-rt/lib/runtime/tools.cpp [5:5]
+ flang-rt/lib/runtime/transformational.cpp [5:5]
+ flang-rt/lib/runtime/type-code.cpp [5:5]
+ flang-rt/lib/runtime/type-info.cpp [5:5]
+ flang-rt/lib/runtime/unit-map.cpp [5:5]
+ flang-rt/lib/runtime/unit-map.h [5:5]
+ flang-rt/lib/runtime/unit.cpp [5:5]
+ flang-rt/lib/runtime/unit.h [5:5]
+ flang-rt/lib/runtime/utf.cpp [5:5]
+ flang-rt/lib/runtime/work-queue.cpp [5:5]
+ flang/include/flang/Common/Fortran-consts.h [5:5]
+ flang/include/flang/Common/bit-population-count.h [5:5]
+ flang/include/flang/Common/constexpr-bitset.h [5:5]
+ flang/include/flang/Common/enum-class.h [5:5]
+ flang/include/flang/Common/enum-set.h [5:5]
+ flang/include/flang/Common/erfc-scaled.h [5:5]
+ flang/include/flang/Common/fast-int-set.h [5:5]
+ flang/include/flang/Common/format.h [5:5]
+ flang/include/flang/Common/idioms.h [5:5]
+ flang/include/flang/Common/leading-zero-bit-count.h [5:5]
+ flang/include/flang/Common/optional.h [5:5]
+ flang/include/flang/Common/real.h [5:5]
+ flang/include/flang/Common/reference-wrapper.h [5:5]
+ flang/include/flang/Common/restorer.h [5:5]
+ flang/include/flang/Common/type-kinds.h [5:5]
+ flang/include/flang/Common/uint128.h [5:5]
+ flang/include/flang/Common/variant.h [5:5]
+ flang/include/flang/Common/visit.h [5:5]
+ flang/include/flang/Common/windows-include.h [5:5]
+ flang/include/flang/Decimal/binary-floating-point.h [5:5]
+ flang/include/flang/Runtime/allocatable.h [5:5]
+ flang/include/flang/Runtime/allocator-registry-consts.h [5:5]
+ flang/include/flang/Runtime/array-constructor-consts.h [5:5]
+ flang/include/flang/Runtime/assign.h [5:5]
+ flang/include/flang/Runtime/c-or-cpp.h [5:5]
+ flang/include/flang/Runtime/character.h [5:5]
+ flang/include/flang/Runtime/command.h [5:5]
+ flang/include/flang/Runtime/complex.h [5:5]
+ flang/include/flang/Runtime/cpp-type.h [5:5]
+ flang/include/flang/Runtime/derived-api.h [5:5]
+ flang/include/flang/Runtime/descriptor-consts.h [5:5]
+ flang/include/flang/Runtime/exceptions.h [5:5]
+ flang/include/flang/Runtime/execute.h [5:5]
+ flang/include/flang/Runtime/extensions.h [5:5]
+ flang/include/flang/Runtime/freestanding-tools.h [5:5]
+ flang/include/flang/Runtime/inquiry.h [5:5]
+ flang/include/flang/Runtime/io-api.h [5:5]
+ flang/include/flang/Runtime/iostat-consts.h [5:5]
+ flang/include/flang/Runtime/iostat.h [5:5]
+ flang/include/flang/Runtime/main.h [5:5]
+ flang/include/flang/Runtime/matmul-instances.inc [5:5]
+ flang/include/flang/Runtime/matmul-transpose.h [5:5]
+ flang/include/flang/Runtime/matmul.h [5:5]
+ flang/include/flang/Runtime/misc-intrinsic.h [5:5]
+ flang/include/flang/Runtime/numeric.h [5:5]
+ flang/include/flang/Runtime/pointer.h [5:5]
+ flang/include/flang/Runtime/ragged.h [5:5]
+ flang/include/flang/Runtime/random.h [5:5]
+ flang/include/flang/Runtime/reduce.h [5:5]
+ flang/include/flang/Runtime/reduction.h [5:5]
+ flang/include/flang/Runtime/stop.h [5:5]
+ flang/include/flang/Runtime/support.h [5:5]
+ flang/include/flang/Runtime/temporary-stack.h [5:5]
+ flang/include/flang/Runtime/time-intrinsic.h [5:5]
+ flang/include/flang/Runtime/transformational.h [5:5]
+ flang/lib/Decimal/big-radix-floating-point.h [5:5]
+ flang/lib/Decimal/binary-to-decimal.cpp [5:5]
+ flang/lib/Decimal/decimal-to-binary.cpp [5:5]
+
+KEEP Apache-2.0 WITH LLVM-exception c1e6c6536fcc444f916047679115c618
+BELONGS ya.make
+ License text:
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ Scancode info:
+ Original SPDX id: Apache-2.0
+ Score : 100.00
+ Match type : TAG
+ Links : http://www.apache.org/licenses/, http://www.apache.org/licenses/LICENSE-2.0, https://spdx.org/licenses/Apache-2.0
+ Files with this license:
+ flang-rt/config-linux.h [5:5]
+ flang-rt/lib/runtime/complex-reduction.c [5:5]
+ flang-rt/lib/runtime/complex-reduction.h [5:5]
+ flang-rt/lib/runtime/environment-default-list.h [5:5]
+ flang/include/flang/Common/ISO_Fortran_binding_wrapper.h [5:5]
+ flang/include/flang/Common/api-attrs.h [5:5]
+ flang/include/flang/Common/float128.h [5:5]
+ flang/include/flang/Common/float80.h [5:5]
+ flang/include/flang/Decimal/decimal.h [5:5]
+ flang/include/flang/ISO_Fortran_binding.h [5:5]
+ flang/include/flang/Runtime/entry-names.h [5:5]
+ flang/include/flang/Runtime/magic-numbers.h [5:5]
+ Scancode info:
+ Original SPDX id: LLVM-exception
+ Score : 100.00
+ Match type : TAG
+ Links : http://llvm.org/foundation/relicensing/LICENSE.txt, https://spdx.org/licenses/LLVM-exception
+ Files with this license:
+ flang-rt/config-linux.h [5:5]
+ flang-rt/lib/runtime/complex-reduction.c [5:5]
+ flang-rt/lib/runtime/complex-reduction.h [5:5]
+ flang-rt/lib/runtime/environment-default-list.h [5:5]
+ flang/include/flang/Common/ISO_Fortran_binding_wrapper.h [5:5]
+ flang/include/flang/Common/api-attrs.h [5:5]
+ flang/include/flang/Common/float128.h [5:5]
+ flang/include/flang/Common/float80.h [5:5]
+ flang/include/flang/Decimal/decimal.h [5:5]
+ flang/include/flang/ISO_Fortran_binding.h [5:5]
+ flang/include/flang/Runtime/entry-names.h [5:5]
+ flang/include/flang/Runtime/magic-numbers.h [5:5]
+
+KEEP Apache-2.0 WITH LLVM-exception df18889e552d44a4679aff552267f802
+BELONGS ya.make
+ License text:
+ The LLVM Project is under the Apache License v2.0 with LLVM Exceptions:
+ Scancode info:
+ Original SPDX id: Apache-2.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.apache.org/licenses/, http://www.apache.org/licenses/LICENSE-2.0, https://spdx.org/licenses/Apache-2.0
+ Files with this license:
+ LICENSE.TXT [2:2]
+ flang-rt/LICENSE.TXT [2:2]
+ flang/LICENSE.TXT [2:2]
+ Scancode info:
+ Original SPDX id: LLVM-exception
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://llvm.org/foundation/relicensing/LICENSE.txt, https://spdx.org/licenses/LLVM-exception
+ Files with this license:
+ LICENSE.TXT [2:2]
+ flang-rt/LICENSE.TXT [2:2]
+ flang/LICENSE.TXT [2:2]
+
+KEEP Apache-2.0 WITH LLVM-exception ed67892e7cae8c050a15bc8c61ac8aa2
+BELONGS ya.make
+ License text:
+ // The original source code is distributed under the Apache License v2.0
+ // with LLVM Exceptions.
+ Scancode info:
+ Original SPDX id: Apache-2.0
+ Score : 81.82
+ Match type : NOTICE
+ Links : http://www.apache.org/licenses/, http://www.apache.org/licenses/LICENSE-2.0, https://spdx.org/licenses/Apache-2.0
+ Files with this license:
+ flang/include/flang/Common/reference-wrapper.h [14:15]
+ Scancode info:
+ Original SPDX id: LLVM-exception
+ Score : 81.82
+ Match type : NOTICE
+ Links : http://llvm.org/foundation/relicensing/LICENSE.txt, https://spdx.org/licenses/LLVM-exception
+ Files with this license:
+ flang/include/flang/Common/reference-wrapper.h [14:15]
+
+KEEP Apache-2.0 WITH LLVM-exception ffcb177513ee7cc880ebfe3c64e5187e
+BELONGS ya.make
+ License text:
+ Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+ See https://llvm.org/LICENSE.txt for license information.
+ Scancode info:
+ Original SPDX id: Apache-2.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.apache.org/licenses/, http://www.apache.org/licenses/LICENSE-2.0, https://spdx.org/licenses/Apache-2.0
+ Files with this license:
+ flang-rt/README.md [3:4]
+ Scancode info:
+ Original SPDX id: LLVM-exception
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://llvm.org/foundation/relicensing/LICENSE.txt, https://spdx.org/licenses/LLVM-exception
+ Files with this license:
+ flang-rt/README.md [3:4]
diff --git a/contrib/libs/llvm/flang-rt/.yandex_meta/disable-fortran.patch b/contrib/libs/llvm/flang-rt/.yandex_meta/disable-fortran.patch
new file mode 100644
index 00000000000..8d342b2be9d
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/.yandex_meta/disable-fortran.patch
@@ -0,0 +1,13 @@
+diff --git a/flang-rt/CMakeLists.txt b/flang-rt/CMakeLists.txt
+index d048ac4b3e5a..231428b20be6 100644
+--- a/flang-rt/CMakeLists.txt
++++ b/flang-rt/CMakeLists.txt
+@@ -55,7 +55,7 @@ if (CMAKE_VERSION VERSION_LESS "3.24")
+ set(CMAKE_Fortran_LINKER_WRAPPER_FLAG_SEP ",")
+ endif ()
+ endif ()
+-enable_language(Fortran)
++# enable_language(Fortran)
+
+
+ list(APPEND CMAKE_MODULE_PATH
diff --git a/contrib/libs/llvm/flang-rt/.yandex_meta/licenses.list.txt b/contrib/libs/llvm/flang-rt/.yandex_meta/licenses.list.txt
new file mode 100644
index 00000000000..111cfd48e34
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/.yandex_meta/licenses.list.txt
@@ -0,0 +1,508 @@
+====================Apache-2.0 WITH LLVM-exception====================
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+====================Apache-2.0 WITH LLVM-exception====================
+ Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+ See https://llvm.org/LICENSE.txt for license information.
+
+
+====================Apache-2.0 WITH LLVM-exception====================
+ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+
+
+====================Apache-2.0 WITH LLVM-exception====================
+ * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+ * See https://llvm.org/LICENSE.txt for license information.
+
+
+====================Apache-2.0 WITH LLVM-exception====================
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+
+
+====================Apache-2.0 WITH LLVM-exception====================
+---- LLVM Exceptions to the Apache 2.0 License ----
+
+As an exception, if, as a result of your compiling your source code, portions
+of this Software are embedded into an Object form of such source code, you
+may redistribute such embedded portions in such Object form without complying
+with the conditions of Sections 4(a), 4(b) and 4(d) of the License.
+
+In addition, if you combine or link compiled forms of this Software with
+software that is licensed under the GPLv2 ("Combined Software") and if a
+court of competent jurisdiction determines that the patent provision (Section
+3), the indemnity provision (Section 9) or other Section of the License
+conflicts with the conditions of the GPLv2, you may retroactively and
+prospectively choose to deem waived or otherwise exclude such Section(s) of
+the License, but only in their entirety and only with respect to the Combined
+Software.
+
+
+====================Apache-2.0 WITH LLVM-exception====================
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+
+
+====================Apache-2.0 WITH LLVM-exception====================
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+
+
+====================Apache-2.0 WITH LLVM-exception====================
+// The original source code is distributed under the Apache License v2.0
+
+
+====================Apache-2.0 WITH LLVM-exception====================
+// The original source code is distributed under the Apache License v2.0
+// with LLVM Exceptions.
+
+
+====================Apache-2.0 WITH LLVM-exception====================
+The LLVM Project is under the Apache License v2.0 with LLVM Exceptions:
+
+
+====================Apache-2.0 WITH LLVM-exception====================
+The LLVM Project is under the Apache License v2.0 with LLVM Exceptions:
+==============================================================================
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+====================COPYRIGHT====================
+Copyright (c) 2003-2019 University of Illinois at Urbana-Champaign.
+All rights reserved.
+
+
+====================NCSA====================
+Legacy LLVM License (https://llvm.org/docs/DeveloperPolicy.html#legacy):
+==============================================================================
+University of Illinois/NCSA
+Open Source License
+
+
+====================NCSA====================
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+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:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimers.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimers in the
+ documentation and/or other materials provided with the distribution.
+
+ * Neither the names of the LLVM Team, University of Illinois at
+ Urbana-Champaign, nor the names of its contributors may be used to
+ endorse or promote products derived from this Software without specific
+ prior written permission.
+
+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
+CONTRIBUTORS 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 WITH THE
+SOFTWARE.
diff --git a/contrib/libs/llvm/flang-rt/.yandex_meta/override.nix b/contrib/libs/llvm/flang-rt/.yandex_meta/override.nix
new file mode 100644
index 00000000000..c460cb7cfbd
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/.yandex_meta/override.nix
@@ -0,0 +1,20 @@
+pkgs: attrs: with pkgs; with attrs; rec {
+ version = "21.1.1";
+
+ src = fetchFromGitHub {
+ owner = "llvm";
+ repo = "llvm-project";
+ rev = "llvmorg-${version}";
+ hash = "sha256-IB9Z3bIMwfgw2W2Vxo89CmtCM9DfOyV2Ei64nqgHrgc=";
+ };
+
+ patches = [
+ ./disable-fortran.patch
+ ];
+ postPatch = "";
+
+ sourceRoot = "source";
+
+ # Remove -DSCUDO_DEFAULT_OPTIONS set in llvmPackages.compiler-rt
+ env.NIX_FLAGS_COMPILE = "";
+}
diff --git a/contrib/libs/llvm/flang-rt/CODE_OF_CONDUCT.md b/contrib/libs/llvm/flang-rt/CODE_OF_CONDUCT.md
new file mode 100644
index 00000000000..0c653c06015
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/CODE_OF_CONDUCT.md
@@ -0,0 +1,3 @@
+# Code of Conduct
+
+The LLVM Community Code of Conduct can be found at https://llvm.org/docs/CodeOfConduct.html.
diff --git a/contrib/libs/llvm/flang-rt/CONTRIBUTING.md b/contrib/libs/llvm/flang-rt/CONTRIBUTING.md
new file mode 100644
index 00000000000..646d709a694
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/CONTRIBUTING.md
@@ -0,0 +1,16 @@
+# Contributing to LLVM
+
+Thank you for your interest in contributing to LLVM! There are many ways to
+contribute, and we appreciate all contributions.
+
+To get started with contributing, please take a look at the
+[Contributing to LLVM](https://llvm.org/docs/Contributing.html) guide. It
+describes how to get involved, raise issues and submit patches.
+
+## Getting in touch
+
+Join the [LLVM Discourse forums](https://discourse.llvm.org/) or [Discord
+chat](https://discord.gg/xS7Z362).
+
+The LLVM project has adopted a [code of conduct](https://llvm.org/docs/CodeOfConduct.html) for
+participants to all modes of communication within the project.
diff --git a/contrib/libs/llvm/flang-rt/LICENSE.TXT b/contrib/libs/llvm/flang-rt/LICENSE.TXT
new file mode 100644
index 00000000000..fa6ac540007
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/LICENSE.TXT
@@ -0,0 +1,279 @@
+==============================================================================
+The LLVM Project is under the Apache License v2.0 with LLVM Exceptions:
+==============================================================================
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+---- LLVM Exceptions to the Apache 2.0 License ----
+
+As an exception, if, as a result of your compiling your source code, portions
+of this Software are embedded into an Object form of such source code, you
+may redistribute such embedded portions in such Object form without complying
+with the conditions of Sections 4(a), 4(b) and 4(d) of the License.
+
+In addition, if you combine or link compiled forms of this Software with
+software that is licensed under the GPLv2 ("Combined Software") and if a
+court of competent jurisdiction determines that the patent provision (Section
+3), the indemnity provision (Section 9) or other Section of the License
+conflicts with the conditions of the GPLv2, you may retroactively and
+prospectively choose to deem waived or otherwise exclude such Section(s) of
+the License, but only in their entirety and only with respect to the Combined
+Software.
+
+==============================================================================
+Software from third parties included in the LLVM Project:
+==============================================================================
+The LLVM Project contains third party software which is under different license
+terms. All such code will be identified clearly using at least one of two
+mechanisms:
+1) It will be in a separate directory tree with its own `LICENSE.txt` or
+ `LICENSE` file at the top containing the specific license and restrictions
+ which apply to that software, or
+2) It will contain specific license and restriction terms at the top of every
+ file.
+
+==============================================================================
+Legacy LLVM License (https://llvm.org/docs/DeveloperPolicy.html#legacy):
+==============================================================================
+University of Illinois/NCSA
+Open Source License
+
+Copyright (c) 2003-2019 University of Illinois at Urbana-Champaign.
+All rights reserved.
+
+Developed by:
+
+ LLVM Team
+
+ University of Illinois at Urbana-Champaign
+
+ http://llvm.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+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:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimers.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimers in the
+ documentation and/or other materials provided with the distribution.
+
+ * Neither the names of the LLVM Team, University of Illinois at
+ Urbana-Champaign, nor the names of its contributors may be used to
+ endorse or promote products derived from this Software without specific
+ prior written permission.
+
+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
+CONTRIBUTORS 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 WITH THE
+SOFTWARE.
+
diff --git a/contrib/libs/llvm/flang-rt/README.md b/contrib/libs/llvm/flang-rt/README.md
new file mode 100644
index 00000000000..a9b29ecbc1a
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/README.md
@@ -0,0 +1,44 @@
+# The LLVM Compiler Infrastructure
+
+[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/llvm/llvm-project/badge)](https://securityscorecards.dev/viewer/?uri=github.com/llvm/llvm-project)
+[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/8273/badge)](https://www.bestpractices.dev/projects/8273)
+[![libc++](https://github.com/llvm/llvm-project/actions/workflows/libcxx-build-and-test.yaml/badge.svg?branch=main&event=schedule)](https://github.com/llvm/llvm-project/actions/workflows/libcxx-build-and-test.yaml?query=event%3Aschedule)
+
+Welcome to the LLVM project!
+
+This repository contains the source code for LLVM, a toolkit for the
+construction of highly optimized compilers, optimizers, and run-time
+environments.
+
+The LLVM project has multiple components. The core of the project is
+itself called "LLVM". This contains all of the tools, libraries, and header
+files needed to process intermediate representations and convert them into
+object files. Tools include an assembler, disassembler, bitcode analyzer, and
+bitcode optimizer.
+
+C-like languages use the [Clang](https://clang.llvm.org/) frontend. This
+component compiles C, C++, Objective-C, and Objective-C++ code into LLVM bitcode
+-- and from there into object files, using LLVM.
+
+Other components include:
+the [libc++ C++ standard library](https://libcxx.llvm.org),
+the [LLD linker](https://lld.llvm.org), and more.
+
+## Getting the Source Code and Building LLVM
+
+Consult the
+[Getting Started with LLVM](https://llvm.org/docs/GettingStarted.html#getting-the-source-code-and-building-llvm)
+page for information on building and running LLVM.
+
+For information on how to contribute to the LLVM project, please take a look at
+the [Contributing to LLVM](https://llvm.org/docs/Contributing.html) guide.
+
+## Getting in touch
+
+Join the [LLVM Discourse forums](https://discourse.llvm.org/), [Discord
+chat](https://discord.gg/xS7Z362),
+[LLVM Office Hours](https://llvm.org/docs/GettingInvolved.html#office-hours) or
+[Regular sync-ups](https://llvm.org/docs/GettingInvolved.html#online-sync-ups).
+
+The LLVM project has adopted a [code of conduct](https://llvm.org/docs/CodeOfConduct.html) for
+participants to all modes of communication within the project.
diff --git a/contrib/libs/llvm/flang-rt/SECURITY.md b/contrib/libs/llvm/flang-rt/SECURITY.md
new file mode 100644
index 00000000000..f6a5e6c0162
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/SECURITY.md
@@ -0,0 +1,5 @@
+# Reporting LLVM Security Issues
+
+To report security issues in LLVM, please follow the steps outlined on the
+[LLVM Security Group](https://llvm.org/docs/Security.html#how-to-report-a-security-issue)
+page.
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/CODE_OWNERS.TXT b/contrib/libs/llvm/flang-rt/flang-rt/CODE_OWNERS.TXT
new file mode 100644
index 00000000000..c836eef486e
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/CODE_OWNERS.TXT
@@ -0,0 +1,13 @@
+This file is a list of the people responsible for ensuring that patches for a
+particular part of Flang are reviewed, either by themself or by someone else.
+They are also the gatekeepers for their part of Flang, with the final word on
+what goes in or not.
+
+The list is sorted by surname and formatted to allow easy grepping and
+beautification by scripts. The fields are: name (N), email (E), web-address
+(W), PGP key ID and fingerprint (P), and description (D). Each entry should
+contain at least the (N), (E) and (D) fields.
+
+N: Steve Scalpone
+D: Anything not covered by others
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/LICENSE.TXT b/contrib/libs/llvm/flang-rt/flang-rt/LICENSE.TXT
new file mode 100644
index 00000000000..53bb2e7fbc7
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/LICENSE.TXT
@@ -0,0 +1,234 @@
+==============================================================================
+The LLVM Project is under the Apache License v2.0 with LLVM Exceptions:
+==============================================================================
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+---- LLVM Exceptions to the Apache 2.0 License ----
+
+As an exception, if, as a result of your compiling your source code, portions
+of this Software are embedded into an Object form of such source code, you
+may redistribute such embedded portions in such Object form without complying
+with the conditions of Sections 4(a), 4(b) and 4(d) of the License.
+
+In addition, if you combine or link compiled forms of this Software with
+software that is licensed under the GPLv2 ("Combined Software") and if a
+court of competent jurisdiction determines that the patent provision (Section
+3), the indemnity provision (Section 9) or other Section of the License
+conflicts with the conditions of the GPLv2, you may retroactively and
+prospectively choose to deem waived or otherwise exclude such Section(s) of
+the License, but only in their entirety and only with respect to the Combined
+Software.
+
+==============================================================================
+Software from third parties included in the LLVM Project:
+==============================================================================
+The LLVM Project contains third party software which is under different license
+terms. All such code will be identified clearly using at least one of two
+mechanisms:
+1) It will be in a separate directory tree with its own `LICENSE.txt` or
+ `LICENSE` file at the top containing the specific license and restrictions
+ which apply to that software, or
+2) It will contain specific license and restriction terms at the top of every
+ file.
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/README.md b/contrib/libs/llvm/flang-rt/flang-rt/README.md
new file mode 100644
index 00000000000..4fe66a85a26
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/README.md
@@ -0,0 +1,193 @@
+<!--===- README.md
+
+ Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+ See https://llvm.org/LICENSE.txt for license information.
+ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+
+-->
+
+# Fortran Runtime (Flang-RT)
+
+Flang-RT is the runtime library for code emitted by the Flang compiler
+(https://flang.llvm.org).
+
+
+## Getting Started
+
+There are two build modes for the Flang-RT. The bootstrap build, also
+called the in-tree build, and the runtime-only build, also called the
+out-of-tree build.
+Not to be confused with the terms
+[in-source and out-of-source](https://cmake.org/cmake/help/latest/manual/cmake.1.html#introduction-to-cmake-buildsystems)
+builds as defined by CMake. In an in-source build, the source directory and the
+build directory are identical, whereas with an out-of-source build the
+build artifacts are stored somewhere else, possibly in a subdirectory of the
+source directory. LLVM does not support in-source builds.
+
+
+### Requirements
+
+Requirements:
+ * [Same as LLVM](https://llvm.org/docs/GettingStarted.html#requirements).
+
+
+### Bootstrapping Runtimes Build
+
+The bootstrapping build will first build Clang and Flang, then use these
+compilers to compile Flang-RT. CMake will create a secondary build tree
+configured to use these just-built compilers. The secondary build will reuse
+the same build options (Flags, Debug/Release, ...) as the primary build.
+It will also ensure that once built, Flang-RT is found by Flang from either
+the build- or install-prefix. To enable, add `flang-rt` to
+`LLVM_ENABLE_RUNTIMES`:
+
+```bash
+cmake -S <path-to-llvm-project-source>/llvm \
+ -GNinja \
+ -DLLVM_ENABLE_PROJECTS="clang;flang" \
+ -DLLVM_ENABLE_RUNTIMES=flang-rt \
+ ...
+```
+
+It is recommended to enable building OpenMP alongside Flang and Flang-RT
+as well. This will build `omp_lib.mod` required to use OpenMP from Fortran.
+Building Compiler-RT may also be required, particularly on platforms that do
+not provide all C-ABI functionality (such as Windows).
+
+```bash
+cmake -S <path-to-llvm-project-source>/llvm \
+ -GNinja \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DLLVM_ENABLE_PROJECTS="clang;flang;openmp" \
+ -DLLVM_ENABLE_RUNTIMES="compiler-rt;flang-rt" \
+ ...
+```
+
+By default, the enabled runtimes will only be built for the host platform
+(`-DLLVM_RUNTIME_TARGETS=default`). To add additional targets to support
+cross-compilation via `flang --target=<target-triple>`, add more triples to
+`LLVM_RUNTIME_TARGETS`, such as
+`-DLLVM_RUNTIME_TARGETS="default;aarch64-linux-gnu"`.
+
+After configuration, build, test, and install the runtime(s) via
+
+```shell
+$ ninja flang-rt
+$ ninja check-flang-rt
+$ ninja install
+```
+
+
+### Standalone Runtimes Build
+
+Instead of building Clang and Flang from scratch, the standalone Runtime build
+uses CMake's environment introspection to find a C, C++, and Fortran compiler.
+The compiler to be used can be controlled using CMake's standard mechanisms such
+as `CMAKE_CXX_COMPILER`, `CMAKE_CXX_COMPILER`, and `CMAKE_Fortran_COMPILER`.
+`CMAKE_Fortran_COMPILER` must be `flang` built from the same Git commit as
+Flang-RT to ensure they are using the same ABI. The C and C++ compiler
+can be any compiler supporting the same ABI.
+
+In addition to the compiler, the build must be able to find LLVM development
+tools such as `lit` and `FileCheck` that are not found in an LLVM's install
+directory. Use `CMAKE_BINARY_DIR` to point to directory where LLVM has
+been built. When building Flang as part of a bootstrapping build
+(`LLVM_ENABLE_PROJECTS=flang`), Flang-RT is automatically added
+unless configured with `-DFLANG_ENABLE_FLANG_RT=OFF`. Add that option to avoid
+having two conflicting versions of the same library.
+
+A simple build configuration might look like the following:
+
+```bash
+cmake -S <path-to-llvm-project-source>/runtimes \
+ -GNinja \
+ -DLLVM_BINARY_DIR=<path-to-llvm-builddir> \
+ -DCMAKE_Fortran_COMPILER=<path-to-llvm-builddir>/bin/flang \
+ -DCMAKE_Fortran_COMPILER_WORKS=yes \
+ -DLLVM_ENABLE_RUNTIMES=flang-rt \
+ ...
+```
+
+The `CMAKE_Fortran_COMPILER_WORKS` parameter must be set because otherwise CMake
+will test whether the Fortran compiler can compile and link programs which will
+obviously fail without a runtime library available yet.
+
+Building Flang-RT for cross-compilation triple, the target triple can
+be selected using `LLVM_DEFAULT_TARGET_TRIPLE` AND `LLVM_RUNTIMES_TARGET`.
+Of course, Flang-RT can be built multiple times with different build
+configurations, but have to be located manually when using with the Flang
+driver using the `-L` option.
+
+After configuration, build, test, and install the runtime via
+
+```shell
+$ ninja
+$ ninja check-flang-rt
+$ ninja install
+```
+
+
+## Configuration Option Reference
+
+Flang-RT has the followign configuration options. This is in
+addition to the build options the LLVM_ENABLE_RUNTIMES mechanism and
+CMake itself provide.
+
+ * `FLANG_RT_INCLUDE_TESTS` (boolean; default: `ON`)
+
+ When `OFF`, does not add any tests and unittests. The `check-flang-rt`
+ build target will do nothing.
+
+ * `FLANG_RUNTIME_F128_MATH_LIB` (default: `""`)
+
+ Determines the implementation of `REAL(16)` math functions. If set to
+ `libquadmath`, uses `quadmath.h` and `-lquadmath` typically distributed with
+ gcc. If empty, disables `REAL(16)` support. For any other value, introspects
+ the compiler for `__float128` or 128-bit `long double` support.
+ [More details](docs/Real16MathSupport.md).
+
+ * `FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT` (values: `"CUDA"`,`"OpenMP"`, `""` default: `""`)
+
+ When set to `CUDA`, builds Flang-RT with experimental support for GPU
+ accelerators using CUDA. `CMAKE_CUDA_COMPILER` must be set if not
+ automatically detected by CMake. `nvcc` as well as `clang` are supported.
+
+ When set to `OpenMP`, builds Flang-RT with experimental support for
+ GPU accelerators using OpenMP offloading. Only Clang is supported for
+ `CMAKE_C_COMPILER` and `CMAKE_CXX_COMPILER`.
+
+ * `FLANG_RT_INCLUDE_CUF` (bool, default: `OFF`)
+
+ Compiles the `libflang_rt.cuda_<CUDA-version>.a/.so` library. This is
+ independent of `FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA` and only
+ requires a
+ [CUDA Toolkit installation](https://cmake.org/cmake/help/latest/module/FindCUDAToolkit.html)
+ (no `CMAKE_CUDA_COMPILER`).
+
+
+### Experimental CUDA Support
+
+With `-DFLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT=CUDA`, the following
+additional configuration options become available.
+
+ * `FLANG_RT_LIBCUDACXX_PATH` (path, default: `""`)
+
+ Path to libcu++ package installation.
+
+ * `FLANG_RT_CUDA_RUNTIME_PTX_WITHOUT_GLOBAL_VARS` (boolean, default: `OFF`)
+
+ Do not compile global variables' definitions when producing PTX library.
+ Default is `OFF`, meaning global variable definitions are compiled by
+ default.
+
+
+### Experimental OpenMP Offload Support
+
+With `-DFLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT=OpenMP`, the following
+additional configuration options become available.
+
+ * `FLANG_RT_DEVICE_ARCHITECTURES` (default: `"all"`)
+
+ A list of device architectures that Flang-RT is going to support.
+ If `"all"` uses a pre-defined list of architectures. Same purpose as
+ `LIBOMPTARGET_DEVICE_ARCHITECTURES` from liboffload.
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/config-linux.h b/contrib/libs/llvm/flang-rt/flang-rt/config-linux.h
new file mode 100644
index 00000000000..45e72bd8751
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/config-linux.h
@@ -0,0 +1,24 @@
+/*===-- cmake/config.cmake.in ---------------------------------------*- C -*-===
+ *
+ * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+ * See https://llvm.org/LICENSE.txt for license information.
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ *
+ *===----------------------------------------------------------------------===*/
+
+#ifndef FORTRAN_RUNTIME_CONFIG_H
+#define FORTRAN_RUNTIME_CONFIG_H
+
+/* Define to 1 if you have the `strerror_r' function. */
+#define HAVE_STRERROR_R 1
+
+/* Define to 1 if you have the declaration of `strerror_s', and to 0 if you
+ don't. */
+#define HAVE_DECL_STRERROR_S 0
+
+/* Define to 1 if you have the `backtrace' function. */
+#define HAVE_BACKTRACE TRUE
+
+#define BACKTRACE_HEADER <execinfo.h>
+
+#endif
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/config-musl.h b/contrib/libs/llvm/flang-rt/flang-rt/config-musl.h
new file mode 100644
index 00000000000..c0f7f9336db
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/config-musl.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#undef HAVE_BACKTRACE
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/config-win.h b/contrib/libs/llvm/flang-rt/flang-rt/config-win.h
new file mode 100644
index 00000000000..2454274b902
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/config-win.h
@@ -0,0 +1,8 @@
+#pragma once
+
+#include "config-linux.h"
+
+#undef HAVE_STRERROR_R
+#define HAVE_DECL_STRERROR_S 1
+
+#undef HAVE_BACKTRACE
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/config.h b/contrib/libs/llvm/flang-rt/flang-rt/config.h
new file mode 100644
index 00000000000..f6b2107fe4f
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/config.h
@@ -0,0 +1,11 @@
+#pragma once
+
+#if defined(_MSC_VER)
+# include "config-win.h"
+#else
+# include "config-linux.h"
+#endif
+
+#if defined(_musl_)
+# include "config-musl.h"
+#endif
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/allocator-registry.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/allocator-registry.h
new file mode 100644
index 00000000000..f0ba77a3607
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/allocator-registry.h
@@ -0,0 +1,60 @@
+//===-- include/flang-rt/runtime/allocator-registry.h -----------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FLANG_RT_RUNTIME_ALLOCATOR_REGISTRY_H_
+#define FLANG_RT_RUNTIME_ALLOCATOR_REGISTRY_H_
+
+#include "flang/Common/api-attrs.h"
+#include "flang/Runtime/allocator-registry-consts.h"
+#include <cstdint>
+#include <cstdlib>
+#include <vector>
+
+#define MAX_ALLOCATOR 7 // 3 bits are reserved in the descriptor.
+
+namespace Fortran::runtime {
+
+using AllocFct = void *(*)(std::size_t, std::int64_t *);
+using FreeFct = void (*)(void *);
+
+typedef struct Allocator_t {
+ AllocFct alloc{nullptr};
+ FreeFct free{nullptr};
+} Allocator_t;
+
+static RT_API_ATTRS void *MallocWrapper(
+ std::size_t size, [[maybe_unused]] std::int64_t *) {
+ return std::malloc(size);
+}
+#ifdef RT_DEVICE_COMPILATION
+static RT_API_ATTRS void FreeWrapper(void *p) { return std::free(p); }
+#endif
+
+struct AllocatorRegistry {
+#ifdef RT_DEVICE_COMPILATION
+ RT_API_ATTRS constexpr AllocatorRegistry()
+ : allocators{{&MallocWrapper, &FreeWrapper}} {}
+#else
+ constexpr AllocatorRegistry() {
+ allocators[kDefaultAllocator] = {&MallocWrapper, &std::free};
+ };
+#endif
+ RT_API_ATTRS void Register(int, Allocator_t);
+ RT_API_ATTRS AllocFct GetAllocator(int pos);
+ RT_API_ATTRS FreeFct GetDeallocator(int pos);
+
+ Allocator_t allocators[MAX_ALLOCATOR];
+};
+
+RT_OFFLOAD_VAR_GROUP_BEGIN
+extern RT_VAR_ATTRS AllocatorRegistry allocatorRegistry;
+RT_OFFLOAD_VAR_GROUP_END
+
+} // namespace Fortran::runtime
+
+#endif // FLANG_RT_RUNTIME_ALLOCATOR_REGISTRY_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/array-constructor.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/array-constructor.h
new file mode 100644
index 00000000000..9c037177161
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/array-constructor.h
@@ -0,0 +1,57 @@
+//===-- include/flang-rt/runtime/array-constructor.h ------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// External APIs to create temporary storage for array constructors when their
+// final extents or length parameters cannot be pre-computed.
+
+#ifndef FLANG_RT_RUNTIME_ARRAY_CONSTRUCTOR_H_
+#define FLANG_RT_RUNTIME_ARRAY_CONSTRUCTOR_H_
+
+#include "descriptor.h"
+#include "flang/Runtime/array-constructor-consts.h"
+#include "flang/Runtime/entry-names.h"
+#include <cstdint>
+
+namespace Fortran::runtime {
+
+// Runtime data structure to hold information about the storage of
+// an array constructor being constructed.
+struct ArrayConstructorVector {
+ RT_API_ATTRS ArrayConstructorVector(class Descriptor &to,
+ SubscriptValue nextValuePosition, SubscriptValue actualAllocationSize,
+ const char *sourceFile, int sourceLine, bool useValueLengthParameters)
+ : to{to}, nextValuePosition{nextValuePosition},
+ actualAllocationSize{actualAllocationSize}, sourceFile{sourceFile},
+ sourceLine{sourceLine},
+ useValueLengthParameters_{useValueLengthParameters} {}
+
+ RT_API_ATTRS bool useValueLengthParameters() const {
+ return useValueLengthParameters_;
+ }
+
+ class Descriptor &to;
+ SubscriptValue nextValuePosition;
+ SubscriptValue actualAllocationSize;
+ const char *sourceFile;
+ int sourceLine;
+
+private:
+ unsigned char useValueLengthParameters_ : 1;
+};
+
+static_assert(sizeof(Fortran::runtime::ArrayConstructorVector) <=
+ MaxArrayConstructorVectorSizeInBytes,
+ "ABI requires sizeof(ArrayConstructorVector) to be smaller than "
+ "MaxArrayConstructorVectorSizeInBytes");
+static_assert(alignof(Fortran::runtime::ArrayConstructorVector) <=
+ MaxArrayConstructorVectorAlignInBytes,
+ "ABI requires alignof(ArrayConstructorVector) to be smaller than "
+ "MaxArrayConstructorVectorAlignInBytes");
+
+} // namespace Fortran::runtime
+#endif // FLANG_RT_RUNTIME_ARRAY_CONSTRUCTOR_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/assign-impl.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/assign-impl.h
new file mode 100644
index 00000000000..cc931f6713c
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/assign-impl.h
@@ -0,0 +1,31 @@
+//===-- include/flang-rt/runtime/assign-impl.h ------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FLANG_RT_RUNTIME_ASSIGN_IMPL_H_
+#define FLANG_RT_RUNTIME_ASSIGN_IMPL_H_
+
+#include "flang/Runtime/freestanding-tools.h"
+
+namespace Fortran::runtime {
+class Descriptor;
+class Terminator;
+
+// Assign one object to another via allocate statement from source specifier.
+// Note that if allocate object and source expression have the same rank, the
+// value of the allocate object becomes the value provided; otherwise the value
+// of each element of allocate object becomes the value provided (9.7.1.2(7)).
+#ifdef RT_DEVICE_COMPILATION
+RT_API_ATTRS void DoFromSourceAssign(Descriptor &, const Descriptor &,
+ Terminator &, MemmoveFct memmoveFct = &MemmoveWrapper);
+#else
+RT_API_ATTRS void DoFromSourceAssign(Descriptor &, const Descriptor &,
+ Terminator &, MemmoveFct memmoveFct = &Fortran::runtime::memmove);
+#endif
+
+} // namespace Fortran::runtime
+#endif // FLANG_RT_RUNTIME_ASSIGN_IMPL_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/buffer.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/buffer.h
new file mode 100644
index 00000000000..b5a9ce9e35e
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/buffer.h
@@ -0,0 +1,224 @@
+//===-- include/flang-rt/runtime/buffer.h -----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// External file buffering
+
+#ifndef FLANG_RT_RUNTIME_BUFFER_H_
+#define FLANG_RT_RUNTIME_BUFFER_H_
+
+#include "io-error.h"
+#include "memory.h"
+#include "flang/Runtime/freestanding-tools.h"
+#include <algorithm>
+#include <cinttypes>
+#include <cstring>
+
+namespace Fortran::runtime::io {
+
+RT_API_ATTRS void LeftShiftBufferCircularly(
+ char *, std::size_t bytes, std::size_t shift);
+
+// Maintains a view of a contiguous region of a file in a memory buffer.
+// The valid data in the buffer may be circular, but any active frame
+// will also be contiguous in memory. The requirement stems from the need to
+// preserve read data that may be reused by means of Tn/TLn edit descriptors
+// without needing to position the file (which may not always be possible,
+// e.g. a socket) and a general desire to reduce system call counts.
+//
+// Possible scenario with a tiny 32-byte buffer after a ReadFrame or
+// WriteFrame with a file offset of 103 to access "DEF":
+//
+// fileOffset_ 100 --+ +-+ frame of interest (103:105)
+// file: ............ABCDEFGHIJKLMNOPQRSTUVWXYZ....
+// buffer: [NOPQRSTUVWXYZ......ABCDEFGHIJKLM] (size_ == 32)
+// | +-- frame_ == 3
+// +----- start_ == 19, length_ == 26
+//
+// The buffer holds length_ == 26 bytes from file offsets 100:125.
+// Those 26 bytes "wrap around" the end of the circular buffer,
+// so file offsets 100:112 map to buffer offsets 19:31 ("A..M") and
+// file offsets 113:125 map to buffer offsets 0:12 ("N..Z")
+// The 3-byte frame of file offsets 103:105 is contiguous in the buffer
+// at buffer offset (start_ + frame_) == 22 ("DEF").
+
+template <typename STORE, std::size_t minBuffer = 65536> class FileFrame {
+public:
+ using FileOffset = std::int64_t;
+
+ RT_API_ATTRS ~FileFrame() { FreeMemoryAndNullify(buffer_); }
+
+ // The valid data in the buffer begins at buffer_[start_] and proceeds
+ // with possible wrap-around for length_ bytes. The current frame
+ // is offset by frame_ bytes into that region and is guaranteed to
+ // be contiguous for at least as many bytes as were requested.
+
+ RT_API_ATTRS FileOffset FrameAt() const { return fileOffset_ + frame_; }
+ RT_API_ATTRS char *Frame() const { return buffer_ + start_ + frame_; }
+ RT_API_ATTRS std::size_t FrameLength() const {
+ return std::min<std::size_t>(length_ - frame_, size_ - (start_ + frame_));
+ }
+ RT_API_ATTRS std::size_t BytesBufferedBeforeFrame() const {
+ return frame_ - start_;
+ }
+
+ // Returns a short frame at a non-fatal EOF. Can return a long frame as well.
+ RT_API_ATTRS std::size_t ReadFrame(
+ FileOffset at, std::size_t bytes, IoErrorHandler &handler) {
+ Flush(handler);
+ Reallocate(bytes, handler);
+ std::int64_t newFrame{at - fileOffset_};
+ if (newFrame < 0 || newFrame > length_) {
+ Reset(at);
+ } else {
+ frame_ = newFrame;
+ }
+ RUNTIME_CHECK(handler, at == fileOffset_ + frame_);
+ if (static_cast<std::int64_t>(start_ + frame_ + bytes) > size_) {
+ DiscardLeadingBytes(frame_, handler);
+ MakeDataContiguous(handler, bytes);
+ RUNTIME_CHECK(handler, at == fileOffset_ + frame_);
+ }
+ if (FrameLength() < bytes) {
+ auto next{start_ + length_};
+ RUNTIME_CHECK(handler, next < size_);
+ auto minBytes{bytes - FrameLength()};
+ auto maxBytes{size_ - next};
+ auto got{Store().Read(
+ fileOffset_ + length_, buffer_ + next, minBytes, maxBytes, handler)};
+ length_ += got;
+ RUNTIME_CHECK(handler, length_ <= size_);
+ }
+ return FrameLength();
+ }
+
+ RT_API_ATTRS void WriteFrame(
+ FileOffset at, std::size_t bytes, IoErrorHandler &handler) {
+ Reallocate(bytes, handler);
+ std::int64_t newFrame{at - fileOffset_};
+ if (!dirty_ || newFrame < 0 || newFrame > length_) {
+ Flush(handler);
+ Reset(at);
+ } else if (start_ + newFrame + static_cast<std::int64_t>(bytes) > size_) {
+ // Flush leading data before "at", retain from "at" onward
+ Flush(handler, length_ - newFrame);
+ MakeDataContiguous(handler, bytes);
+ } else {
+ frame_ = newFrame;
+ }
+ RUNTIME_CHECK(handler, at == fileOffset_ + frame_);
+ dirty_ = true;
+ length_ = std::max<std::int64_t>(length_, frame_ + bytes);
+ }
+
+ RT_API_ATTRS void Flush(IoErrorHandler &handler, std::int64_t keep = 0) {
+ if (dirty_) {
+ while (length_ > keep) {
+ std::size_t chunk{
+ std::min<std::size_t>(length_ - keep, size_ - start_)};
+ std::size_t put{
+ Store().Write(fileOffset_, buffer_ + start_, chunk, handler)};
+ DiscardLeadingBytes(put, handler);
+ if (put < chunk) {
+ break;
+ }
+ }
+ if (length_ == 0) {
+ Reset(fileOffset_);
+ }
+ }
+ }
+
+ RT_API_ATTRS void TruncateFrame(std::int64_t at, IoErrorHandler &handler) {
+ RUNTIME_CHECK(handler, !dirty_);
+ if (at <= fileOffset_) {
+ Reset(at);
+ } else if (at < fileOffset_ + length_) {
+ length_ = at - fileOffset_;
+ }
+ }
+
+private:
+ RT_API_ATTRS STORE &Store() { return static_cast<STORE &>(*this); }
+
+ RT_API_ATTRS void Reallocate(
+ std::int64_t bytes, const Terminator &terminator) {
+ if (bytes > size_) {
+ char *old{buffer_};
+ auto oldSize{size_};
+ size_ = std::max<std::int64_t>(bytes, size_ + minBuffer);
+ buffer_ =
+ reinterpret_cast<char *>(AllocateMemoryOrCrash(terminator, size_));
+ auto chunk{std::min<std::int64_t>(length_, oldSize - start_)};
+ // "memcpy" in glibc has a "nonnull" attribute on the source pointer.
+ // Avoid passing a null pointer, since it would result in an undefined
+ // behavior.
+ if (old != nullptr) {
+ std::memcpy(buffer_, old + start_, chunk);
+ std::memcpy(buffer_ + chunk, old, length_ - chunk);
+ FreeMemory(old);
+ }
+ start_ = 0;
+ }
+ }
+
+ RT_API_ATTRS void Reset(FileOffset at) {
+ start_ = length_ = frame_ = 0;
+ fileOffset_ = at;
+ dirty_ = false;
+ }
+
+ RT_API_ATTRS void DiscardLeadingBytes(
+ std::int64_t n, const Terminator &terminator) {
+ RUNTIME_CHECK(terminator, length_ >= n);
+ length_ -= n;
+ if (length_ == 0) {
+ start_ = 0;
+ } else {
+ start_ += n;
+ if (start_ >= size_) {
+ start_ -= size_;
+ }
+ }
+ if (frame_ >= n) {
+ frame_ -= n;
+ } else {
+ frame_ = 0;
+ }
+ fileOffset_ += n;
+ }
+
+ RT_API_ATTRS void MakeDataContiguous(
+ IoErrorHandler &handler, std::size_t bytes) {
+ if (static_cast<std::int64_t>(start_ + bytes) > size_) {
+ // Frame would wrap around; shift current data (if any) to force
+ // contiguity.
+ RUNTIME_CHECK(handler, length_ < size_);
+ if (start_ + length_ <= size_) {
+ // [......abcde..] -> [abcde........]
+ runtime::memmove(buffer_, buffer_ + start_, length_);
+ } else {
+ // [cde........ab] -> [abcde........]
+ auto n{start_ + length_ - size_}; // 3 for cde
+ RUNTIME_CHECK(handler, length_ >= n);
+ runtime::memmove(buffer_ + n, buffer_ + start_, length_ - n); // cdeab
+ LeftShiftBufferCircularly(buffer_, length_, n); // abcde
+ }
+ start_ = 0;
+ }
+ }
+
+ char *buffer_{nullptr};
+ std::int64_t size_{0}; // current allocated buffer size
+ FileOffset fileOffset_{0}; // file offset corresponding to buffer valid data
+ std::int64_t start_{0}; // buffer_[] offset of valid data
+ std::int64_t length_{0}; // valid data length (can wrap)
+ std::int64_t frame_{0}; // offset of current frame in valid data
+ bool dirty_{false};
+};
+} // namespace Fortran::runtime::io
+#endif // FLANG_RT_RUNTIME_BUFFER_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/connection.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/connection.h
new file mode 100644
index 00000000000..601669942cd
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/connection.h
@@ -0,0 +1,144 @@
+//===-- include/flang-rt/runtime/connection.h -------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Fortran I/O connection state (abstracted over internal & external units)
+
+#ifndef FLANG_RT_RUNTIME_CONNECTION_H_
+#define FLANG_RT_RUNTIME_CONNECTION_H_
+
+#include "format.h"
+#include "flang/Common/optional.h"
+#include <cinttypes>
+
+namespace Fortran::runtime::io {
+
+class IoStatementState;
+
+enum class Direction { Output, Input };
+enum class Access { Sequential, Direct, Stream };
+
+// These characteristics of a connection are immutable after being
+// established in an OPEN statement.
+struct ConnectionAttributes {
+ Access access{Access::Sequential}; // ACCESS='SEQUENTIAL', 'DIRECT', 'STREAM'
+ Fortran::common::optional<bool> isUnformatted; // FORM='UNFORMATTED' if true
+ bool isUTF8{false}; // ENCODING='UTF-8'
+ unsigned char internalIoCharKind{0}; // 0->external, 1/2/4->internal
+ Fortran::common::optional<std::int64_t> openRecl; // RECL= on OPEN
+
+ RT_API_ATTRS bool IsRecordFile() const {
+ // Formatted stream files are viewed as having records, at least on input
+ return access != Access::Stream || !isUnformatted.value_or(true);
+ }
+
+ template <typename CHAR = char> constexpr RT_API_ATTRS bool useUTF8() const {
+ // For wide CHARACTER kinds, always use UTF-8 for formatted I/O.
+ // For single-byte CHARACTER, encode characters >= 0x80 with
+ // UTF-8 iff the mode is set.
+ return internalIoCharKind == 0 && (sizeof(CHAR) > 1 || isUTF8);
+ }
+};
+
+struct ConnectionState : public ConnectionAttributes {
+ RT_API_ATTRS bool IsAtEOF() const {
+ // true when read has hit EOF or endfile record
+ return endfileRecordNumber && currentRecordNumber >= *endfileRecordNumber;
+ }
+ RT_API_ATTRS bool IsAfterEndfile() const {
+ // true after ENDFILE until repositioned
+ return endfileRecordNumber && currentRecordNumber > *endfileRecordNumber;
+ }
+
+ // All positions and measurements are always in units of bytes,
+ // not characters. Multi-byte character encodings are possible in
+ // both internal I/O (when the character kind of the variable is 2 or 4)
+ // and external formatted I/O (when the encoding is UTF-8).
+ RT_API_ATTRS std::size_t RemainingSpaceInRecord() const {
+ auto recl{recordLength.value_or(openRecl.value_or(
+ executionEnvironment.listDirectedOutputLineLengthLimit))};
+ return positionInRecord >= recl ? 0 : recl - positionInRecord;
+ }
+ RT_API_ATTRS bool NeedAdvance(std::size_t width) const {
+ return positionInRecord > 0 && width > RemainingSpaceInRecord();
+ }
+ RT_API_ATTRS void HandleAbsolutePosition(std::int64_t n) {
+ positionInRecord = (n < 0 ? 0 : n) + leftTabLimit.value_or(0);
+ }
+ RT_API_ATTRS void HandleRelativePosition(std::int64_t n) {
+ auto least{leftTabLimit.value_or(0)};
+ auto newPos{positionInRecord + n};
+ positionInRecord = newPos < least ? least : newPos;
+ ;
+ }
+
+ RT_API_ATTRS void BeginRecord() {
+ positionInRecord = 0;
+ furthestPositionInRecord = 0;
+ unterminatedRecord = false;
+ }
+
+ RT_API_ATTRS Fortran::common::optional<std::int64_t>
+ EffectiveRecordLength() const {
+ // When an input record is longer than an explicit RECL= from OPEN
+ // it is effectively truncated on input.
+ return openRecl && recordLength && *openRecl < *recordLength ? openRecl
+ : recordLength;
+ }
+
+ Fortran::common::optional<std::int64_t> recordLength;
+
+ std::int64_t currentRecordNumber{1}; // 1 is first
+
+ // positionInRecord is the 0-based bytes offset in the current record
+ // to/from which the next data transfer will occur. It can be past
+ // furthestPositionInRecord if moved by an X or T or TR control edit
+ // descriptor.
+ std::int64_t positionInRecord{0};
+
+ // furthestPositionInRecord is the 0-based byte offset of the greatest
+ // position in the current record to/from which any data transfer has
+ // occurred, plus one. It can be viewed as a count of bytes processed.
+ std::int64_t furthestPositionInRecord{0}; // max(position+bytes)
+
+ // Set at end of non-advancing I/O data transfer
+ Fortran::common::optional<std::int64_t>
+ leftTabLimit; // offset in current record
+
+ // currentRecordNumber value captured after ENDFILE/REWIND/BACKSPACE statement
+ // or an end-of-file READ condition on a sequential access file
+ Fortran::common::optional<std::int64_t> endfileRecordNumber;
+
+ // Mutable modes set at OPEN() that can be overridden in READ/WRITE & FORMAT
+ MutableModes modes; // BLANK=, DECIMAL=, SIGN=, ROUND=, PAD=, DELIM=, kP
+
+ // Set when processing repeated items during list-directed & NAMELIST input
+ // in order to keep a span of records in frame on a non-positionable file,
+ // so that backspacing to the beginning of the repeated item doesn't require
+ // repositioning the external storage medium when that's impossible.
+ bool pinnedFrame{false};
+
+ // Set when the last record of a file is not properly terminated
+ // so that a non-advancing READ will not signal EOR.
+ bool unterminatedRecord{false};
+};
+
+// Utility class for capturing and restoring a position in an input stream.
+class SavedPosition {
+public:
+ explicit RT_API_ATTRS SavedPosition(IoStatementState &);
+ RT_API_ATTRS ~SavedPosition();
+ RT_API_ATTRS void Cancel() { cancelled_ = true; }
+
+private:
+ IoStatementState &io_;
+ ConnectionState saved_;
+ bool cancelled_{false};
+};
+
+} // namespace Fortran::runtime::io
+#endif // FLANG_RT_RUNTIME_CONNECTION_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/derived.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/derived.h
new file mode 100644
index 00000000000..ac6962c5716
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/derived.h
@@ -0,0 +1,51 @@
+//===-- include/flang-rt/runtime/derived.h ----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Internal runtime utilities for derived type operations.
+
+#ifndef FLANG_RT_RUNTIME_DERIVED_H_
+#define FLANG_RT_RUNTIME_DERIVED_H_
+
+#include "flang/Common/api-attrs.h"
+
+namespace Fortran::runtime::typeInfo {
+class DerivedType;
+}
+
+namespace Fortran::runtime {
+class Descriptor;
+class Terminator;
+
+// Perform default component initialization, allocate automatic components.
+// Returns a STAT= code (0 when all's well).
+RT_API_ATTRS int Initialize(const Descriptor &, const typeInfo::DerivedType &,
+ Terminator &, bool hasStat = false, const Descriptor *errMsg = nullptr);
+
+// Initializes an object clone from the original object.
+// Each allocatable member of the clone is allocated with the same bounds as
+// in the original object, if it is also allocated in it.
+// Returns a STAT= code (0 when all's well).
+RT_API_ATTRS int InitializeClone(const Descriptor &, const Descriptor &,
+ const typeInfo::DerivedType &, Terminator &, bool hasStat = false,
+ const Descriptor *errMsg = nullptr);
+
+// Call FINAL subroutines, if any
+RT_API_ATTRS void Finalize(
+ const Descriptor &, const typeInfo::DerivedType &derived, Terminator *);
+
+// Call FINAL subroutines, deallocate allocatable & automatic components.
+// Does not deallocate the original descriptor.
+RT_API_ATTRS void Destroy(const Descriptor &, bool finalize,
+ const typeInfo::DerivedType &, Terminator *);
+
+// Return true if the passed descriptor is for a derived type
+// entity that has a dynamic (allocatable, automatic) component.
+RT_API_ATTRS bool HasDynamicComponent(const Descriptor &);
+
+} // namespace Fortran::runtime
+#endif // FLANG_RT_RUNTIME_DERIVED_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/descriptor.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/descriptor.h
new file mode 100644
index 00000000000..68106f3462c
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/descriptor.h
@@ -0,0 +1,623 @@
+//===-- include/flang-rt/runtime/descriptor.h -------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FLANG_RT_RUNTIME_DESCRIPTOR_H_
+#define FLANG_RT_RUNTIME_DESCRIPTOR_H_
+
+// Defines data structures used during execution of a Fortran program
+// to implement nontrivial dummy arguments, pointers, allocatables,
+// function results, and the special behaviors of instances of derived types.
+// This header file includes and extends the published language
+// interoperability header that is required by the Fortran 2018 standard
+// as a subset of definitions suitable for exposure to user C/C++ code.
+// User C code is welcome to depend on that ISO_Fortran_binding.h file,
+// but should never reference this internal header.
+
+#include "memory.h"
+#include "type-code.h"
+#include "flang-rt/runtime/allocator-registry.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
+#include "flang/Common/optional.h"
+#include "flang/Runtime/descriptor-consts.h"
+#include <algorithm>
+#include <cassert>
+#include <cinttypes>
+#include <cstddef>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+
+/// Value used for asyncObject when no specific stream is specified.
+static constexpr std::int64_t *kNoAsyncObject = nullptr;
+
+namespace Fortran::runtime {
+
+class Terminator;
+
+RT_VAR_GROUP_BEGIN
+static constexpr RT_CONST_VAR_ATTRS int maxRank{CFI_MAX_RANK};
+RT_VAR_GROUP_END
+
+// A C++ view of the sole interoperable standard descriptor (ISO::CFI_cdesc_t)
+// and its type and per-dimension information.
+
+class Dimension {
+public:
+ RT_API_ATTRS SubscriptValue LowerBound() const { return raw_.lower_bound; }
+ RT_API_ATTRS SubscriptValue Extent() const { return raw_.extent; }
+ RT_API_ATTRS SubscriptValue UpperBound() const {
+ return LowerBound() + Extent() - 1;
+ }
+ RT_API_ATTRS SubscriptValue ByteStride() const { return raw_.sm; }
+
+ RT_API_ATTRS Dimension &SetBounds(
+ SubscriptValue lower, SubscriptValue upper) {
+ if (upper >= lower) {
+ raw_.lower_bound = lower;
+ raw_.extent = upper - lower + 1;
+ } else {
+ raw_.lower_bound = 1;
+ raw_.extent = 0;
+ }
+ return *this;
+ }
+ // Do not use this API to cause the LB of an empty dimension
+ // to be anything other than 1. Use SetBounds() instead if you can.
+ RT_API_ATTRS Dimension &SetLowerBound(SubscriptValue lower) {
+ raw_.lower_bound = lower;
+ return *this;
+ }
+ RT_API_ATTRS Dimension &SetUpperBound(SubscriptValue upper) {
+ auto lower{raw_.lower_bound};
+ raw_.extent = upper >= lower ? upper - lower + 1 : 0;
+ return *this;
+ }
+ RT_API_ATTRS Dimension &SetExtent(SubscriptValue extent) {
+ raw_.extent = extent;
+ return *this;
+ }
+ RT_API_ATTRS Dimension &SetByteStride(SubscriptValue bytes) {
+ raw_.sm = bytes;
+ return *this;
+ }
+
+private:
+ ISO::CFI_dim_t raw_;
+};
+
+// The storage for this object follows the last used dim[] entry in a
+// Descriptor (CFI_cdesc_t) generic descriptor. Space matters here, since
+// descriptors serve as POINTER and ALLOCATABLE components of derived type
+// instances. The presence of this structure is encoded in the
+// CFI_cdesc_t.extra field, and the number of elements in the len_[]
+// array is determined by derivedType_->LenParameters().
+class DescriptorAddendum {
+public:
+ explicit RT_API_ATTRS DescriptorAddendum(
+ const typeInfo::DerivedType *dt = nullptr)
+ : derivedType_{dt}, len_{0} {}
+ RT_API_ATTRS DescriptorAddendum &operator=(const DescriptorAddendum &);
+
+ RT_API_ATTRS const typeInfo::DerivedType *derivedType() const {
+ return derivedType_;
+ }
+ RT_API_ATTRS DescriptorAddendum &set_derivedType(
+ const typeInfo::DerivedType *dt) {
+ derivedType_ = dt;
+ return *this;
+ }
+
+ RT_API_ATTRS std::size_t LenParameters() const;
+
+ RT_API_ATTRS typeInfo::TypeParameterValue LenParameterValue(int which) const {
+ return len_[which];
+ }
+ static constexpr RT_API_ATTRS std::size_t SizeInBytes(int lenParameters) {
+ // TODO: Don't waste that last word if lenParameters == 0
+ return sizeof(DescriptorAddendum) +
+ std::max(lenParameters - 1, 0) * sizeof(typeInfo::TypeParameterValue);
+ }
+ RT_API_ATTRS std::size_t SizeInBytes() const;
+
+ RT_API_ATTRS void SetLenParameterValue(
+ int which, typeInfo::TypeParameterValue x) {
+ len_[which] = x;
+ }
+
+ void Dump(FILE * = stdout) const;
+
+private:
+ const typeInfo::DerivedType *derivedType_;
+ typeInfo::TypeParameterValue len_[1]; // must be the last component
+ // The LEN type parameter values can also include captured values of
+ // specification expressions that were used for bounds and for LEN type
+ // parameters of components. The values have been truncated to the LEN
+ // type parameter's type, if shorter than 64 bits, then sign-extended.
+};
+
+// A C++ view of a standard descriptor object.
+class Descriptor {
+public:
+ // Be advised: this class type is not suitable for use when allocating
+ // a descriptor -- it is a dynamic view of the common descriptor format.
+ // If used in a simple declaration of a local variable or dynamic allocation,
+ // the size is going to be correct only by accident, since the true size of
+ // a descriptor depends on the number of its dimensions and the presence and
+ // size of an addendum, which depends on the type of the data.
+ // Use the class template StaticDescriptor (below) to declare a descriptor
+ // whose type and rank are fixed and known at compilation time. Use the
+ // Create() static member functions otherwise to dynamically allocate a
+ // descriptor.
+
+ RT_API_ATTRS Descriptor(const Descriptor &);
+ RT_API_ATTRS Descriptor &operator=(const Descriptor &);
+
+ // Returns the number of bytes occupied by an element of the given
+ // category and kind including any alignment padding required
+ // between adjacent elements.
+ static RT_API_ATTRS std::size_t BytesFor(TypeCategory category, int kind);
+
+ RT_API_ATTRS void Establish(TypeCode t, std::size_t elementBytes,
+ void *p = nullptr, int rank = maxRank,
+ const SubscriptValue *extent = nullptr,
+ ISO::CFI_attribute_t attribute = CFI_attribute_other,
+ bool addendum = false);
+ RT_API_ATTRS void Establish(TypeCategory, int kind, void *p = nullptr,
+ int rank = maxRank, const SubscriptValue *extent = nullptr,
+ ISO::CFI_attribute_t attribute = CFI_attribute_other,
+ bool addendum = false);
+ RT_API_ATTRS void Establish(int characterKind, std::size_t characters,
+ void *p = nullptr, int rank = maxRank,
+ const SubscriptValue *extent = nullptr,
+ ISO::CFI_attribute_t attribute = CFI_attribute_other,
+ bool addendum = false);
+ RT_API_ATTRS void Establish(const typeInfo::DerivedType &dt,
+ void *p = nullptr, int rank = maxRank,
+ const SubscriptValue *extent = nullptr,
+ ISO::CFI_attribute_t attribute = CFI_attribute_other);
+
+ // To create a descriptor for a derived type the caller
+ // must provide non-null dt argument.
+ // The addendum argument is only used for testing purposes,
+ // and it may force a descriptor with an addendum while
+ // dt may be null.
+ static RT_API_ATTRS OwningPtr<Descriptor> Create(TypeCode t,
+ std::size_t elementBytes, void *p = nullptr, int rank = maxRank,
+ const SubscriptValue *extent = nullptr,
+ ISO::CFI_attribute_t attribute = CFI_attribute_other,
+ bool addendum = false, const typeInfo::DerivedType *dt = nullptr);
+ static RT_API_ATTRS OwningPtr<Descriptor> Create(TypeCategory, int kind,
+ void *p = nullptr, int rank = maxRank,
+ const SubscriptValue *extent = nullptr,
+ ISO::CFI_attribute_t attribute = CFI_attribute_other);
+ static RT_API_ATTRS OwningPtr<Descriptor> Create(int characterKind,
+ SubscriptValue characters, void *p = nullptr, int rank = maxRank,
+ const SubscriptValue *extent = nullptr,
+ ISO::CFI_attribute_t attribute = CFI_attribute_other);
+ static RT_API_ATTRS OwningPtr<Descriptor> Create(
+ const typeInfo::DerivedType &dt, void *p = nullptr, int rank = maxRank,
+ const SubscriptValue *extent = nullptr,
+ ISO::CFI_attribute_t attribute = CFI_attribute_other);
+
+ RT_API_ATTRS ISO::CFI_cdesc_t &raw() { return raw_; }
+ RT_API_ATTRS const ISO::CFI_cdesc_t &raw() const { return raw_; }
+ RT_API_ATTRS std::size_t ElementBytes() const { return raw_.elem_len; }
+ RT_API_ATTRS int rank() const { return raw_.rank; }
+ RT_API_ATTRS TypeCode type() const { return TypeCode{raw_.type}; }
+
+ RT_API_ATTRS Descriptor &set_base_addr(void *p) {
+ raw_.base_addr = p;
+ return *this;
+ }
+
+ RT_API_ATTRS bool IsPointer() const {
+ return raw_.attribute == CFI_attribute_pointer;
+ }
+ RT_API_ATTRS bool IsAllocatable() const {
+ return raw_.attribute == CFI_attribute_allocatable;
+ }
+ RT_API_ATTRS bool IsAllocated() const { return raw_.base_addr != nullptr; }
+
+ RT_API_ATTRS Dimension &GetDimension(int dim) {
+ return *reinterpret_cast<Dimension *>(&raw_.dim[dim]);
+ }
+ RT_API_ATTRS const Dimension &GetDimension(int dim) const {
+ return *reinterpret_cast<const Dimension *>(&raw_.dim[dim]);
+ }
+
+ RT_API_ATTRS std::size_t SubscriptByteOffset(
+ int dim, SubscriptValue subscriptValue) const {
+ const Dimension &dimension{GetDimension(dim)};
+ return (subscriptValue - dimension.LowerBound()) * dimension.ByteStride();
+ }
+
+ RT_API_ATTRS std::size_t SubscriptsToByteOffset(
+ const SubscriptValue subscript[]) const {
+ std::size_t offset{0};
+ for (int j{0}; j < raw_.rank; ++j) {
+ offset += SubscriptByteOffset(j, subscript[j]);
+ }
+ return offset;
+ }
+
+ template <typename A = char>
+ RT_API_ATTRS A *OffsetElement(std::size_t offset = 0) const {
+ return reinterpret_cast<A *>(
+ reinterpret_cast<char *>(raw_.base_addr) + offset);
+ }
+
+ template <typename A>
+ RT_API_ATTRS A *Element(const SubscriptValue subscript[]) const {
+ return OffsetElement<A>(SubscriptsToByteOffset(subscript));
+ }
+
+ template <typename A>
+ RT_API_ATTRS A *ElementComponent(
+ const SubscriptValue subscript[], std::size_t componentOffset) const {
+ return OffsetElement<A>(
+ SubscriptsToByteOffset(subscript) + componentOffset);
+ }
+
+ template <typename A>
+ RT_API_ATTRS A *ZeroBasedIndexedElement(std::size_t n) const {
+ if (raw_.rank == 0) {
+ if (n == 0) {
+ return OffsetElement<A>();
+ }
+ } else if (raw_.rank == 1) {
+ const auto &dim{GetDimension(0)};
+ if (n < static_cast<std::size_t>(dim.Extent())) {
+ return OffsetElement<A>(n * dim.ByteStride());
+ }
+ } else {
+ SubscriptValue at[maxRank];
+ if (SubscriptsForZeroBasedElementNumber(at, n)) {
+ return Element<A>(at);
+ }
+ }
+ return nullptr;
+ }
+
+ RT_API_ATTRS int GetLowerBounds(SubscriptValue subscript[]) const {
+ for (int j{0}; j < raw_.rank; ++j) {
+ subscript[j] = GetDimension(j).LowerBound();
+ }
+ return raw_.rank;
+ }
+
+ RT_API_ATTRS int GetShape(SubscriptValue subscript[]) const {
+ for (int j{0}; j < raw_.rank; ++j) {
+ subscript[j] = GetDimension(j).Extent();
+ }
+ return raw_.rank;
+ }
+
+ // When the passed subscript vector contains the last (or first)
+ // subscripts of the array, these wrap the subscripts around to
+ // their first (or last) values and return false.
+ RT_API_ATTRS bool IncrementSubscripts(
+ SubscriptValue subscript[], const int *permutation = nullptr) const {
+ for (int j{0}; j < raw_.rank; ++j) {
+ int k{permutation ? permutation[j] : j};
+ const Dimension &dim{GetDimension(k)};
+ if (subscript[k]++ < dim.UpperBound()) {
+ return true;
+ }
+ subscript[k] = dim.LowerBound();
+ }
+ return false;
+ }
+
+ RT_API_ATTRS bool DecrementSubscripts(
+ SubscriptValue[], const int *permutation = nullptr) const;
+
+ // False when out of range.
+ RT_API_ATTRS bool SubscriptsForZeroBasedElementNumber(
+ SubscriptValue subscript[], std::size_t elementNumber,
+ const int *permutation = nullptr) const {
+ if (raw_.rank == 0) {
+ return elementNumber == 0;
+ }
+ std::size_t dimCoefficient[maxRank];
+ int k0{permutation ? permutation[0] : 0};
+ dimCoefficient[0] = 1;
+ auto coefficient{static_cast<std::size_t>(GetDimension(k0).Extent())};
+ for (int j{1}; j < raw_.rank; ++j) {
+ int k{permutation ? permutation[j] : j};
+ const Dimension &dim{GetDimension(k)};
+ dimCoefficient[j] = coefficient;
+ coefficient *= dim.Extent();
+ }
+ if (elementNumber >= coefficient) {
+ return false; // out of range
+ }
+ for (int j{raw_.rank - 1}; j > 0; --j) {
+ int k{permutation ? permutation[j] : j};
+ const Dimension &dim{GetDimension(k)};
+ std::size_t quotient{elementNumber / dimCoefficient[j]};
+ subscript[k] = quotient + dim.LowerBound();
+ elementNumber -= quotient * dimCoefficient[j];
+ }
+ subscript[k0] = elementNumber + GetDimension(k0).LowerBound();
+ return true;
+ }
+
+ RT_API_ATTRS std::size_t ZeroBasedElementNumber(
+ const SubscriptValue *, const int *permutation = nullptr) const;
+
+ RT_API_ATTRS DescriptorAddendum *Addendum() {
+ if (HasAddendum()) {
+ return reinterpret_cast<DescriptorAddendum *>(&GetDimension(rank()));
+ } else {
+ return nullptr;
+ }
+ }
+ RT_API_ATTRS const DescriptorAddendum *Addendum() const {
+ if (HasAddendum()) {
+ return reinterpret_cast<const DescriptorAddendum *>(
+ &GetDimension(rank()));
+ } else {
+ return nullptr;
+ }
+ }
+
+ // Returns size in bytes of the descriptor (not the data)
+ static constexpr RT_API_ATTRS std::size_t SizeInBytes(
+ int rank, bool addendum = false, int lengthTypeParameters = 0) {
+ std::size_t bytes{sizeof(Descriptor) - sizeof(Dimension)};
+ bytes += rank * sizeof(Dimension);
+ if (addendum || lengthTypeParameters > 0) {
+ bytes += DescriptorAddendum::SizeInBytes(lengthTypeParameters);
+ }
+ return bytes;
+ }
+
+ RT_API_ATTRS std::size_t SizeInBytes() const;
+
+ RT_API_ATTRS std::size_t Elements() const;
+ RT_API_ATTRS std::size_t InlineElements() const {
+ int n{rank()};
+ if (n == 0) {
+ return 1;
+ } else {
+ auto elements{static_cast<std::size_t>(GetDimension(0).Extent())};
+ for (int j{1}; j < n; ++j) {
+ elements *= GetDimension(j).Extent();
+ }
+ return elements;
+ }
+ }
+
+ // Allocate() assumes Elements() and ElementBytes() work;
+ // define the extents of the dimensions and the element length
+ // before calling. It (re)computes the byte strides after
+ // allocation. Does not allocate automatic components or
+ // perform default component initialization.
+ RT_API_ATTRS int Allocate(std::int64_t *asyncObject);
+ RT_API_ATTRS void SetByteStrides();
+
+ // Deallocates storage; does not call FINAL subroutines or
+ // deallocate allocatable/automatic components.
+ RT_API_ATTRS int Deallocate() {
+ ISO::CFI_cdesc_t &descriptor{raw()};
+ void *pointer{descriptor.base_addr};
+ if (!pointer) {
+ return CFI_ERROR_BASE_ADDR_NULL;
+ } else {
+ int allocIndex{MapAllocIdx()};
+ if (allocIndex == kDefaultAllocator) {
+ std::free(pointer);
+ } else {
+ allocatorRegistry.GetDeallocator(MapAllocIdx())(pointer);
+ }
+ descriptor.base_addr = nullptr;
+ return CFI_SUCCESS;
+ }
+ }
+
+ // Deallocates storage, including allocatable and automatic
+ // components. Optionally invokes FINAL subroutines.
+ RT_API_ATTRS int Destroy(bool finalize = false, bool destroyPointers = false,
+ Terminator * = nullptr);
+
+ RT_API_ATTRS bool IsContiguous(int leadingDimensions = maxRank) const {
+ auto bytes{static_cast<SubscriptValue>(ElementBytes())};
+ if (leadingDimensions > raw_.rank) {
+ leadingDimensions = raw_.rank;
+ }
+ bool stridesAreContiguous{true};
+ for (int j{0}; j < leadingDimensions; ++j) {
+ const Dimension &dim{GetDimension(j)};
+ stridesAreContiguous &= bytes == dim.ByteStride() || dim.Extent() == 1;
+ bytes *= dim.Extent();
+ }
+ // One and zero element arrays are contiguous even if the descriptor
+ // byte strides are not perfect multiples.
+ // Arrays with more than 2 elements may also be contiguous even if a
+ // byte stride in one dimension is not a perfect multiple, as long as
+ // this is the last dimension, or if the dimension has one extent and
+ // the following dimension have either one extents or contiguous byte
+ // strides.
+ return stridesAreContiguous || bytes == 0;
+ }
+
+ // The result, if any, is a fixed stride value that can be used to
+ // address all elements. It generalizes contiguity by also allowing
+ // the case of an array with extent 1 on all but one dimension.
+ RT_API_ATTRS common::optional<SubscriptValue> FixedStride() const {
+ auto rank{static_cast<std::size_t>(raw_.rank)};
+ common::optional<SubscriptValue> stride;
+ for (std::size_t j{0}; j < rank; ++j) {
+ const Dimension &dim{GetDimension(j)};
+ auto extent{dim.Extent()};
+ if (extent == 0) {
+ break; // empty array
+ } else if (extent == 1) { // ok
+ } else if (stride) {
+ // Extent > 1 on multiple dimensions
+ if (IsContiguous()) {
+ return ElementBytes();
+ } else {
+ return common::nullopt;
+ }
+ } else {
+ stride = dim.ByteStride();
+ }
+ }
+ return stride.value_or(0); // 0 for scalars and empty arrays
+ }
+
+ // Establishes a pointer to a section or element.
+ RT_API_ATTRS bool EstablishPointerSection(const Descriptor &source,
+ const SubscriptValue *lower = nullptr,
+ const SubscriptValue *upper = nullptr,
+ const SubscriptValue *stride = nullptr);
+
+ RT_API_ATTRS void ApplyMold(const Descriptor &, int rank);
+
+ RT_API_ATTRS void Check() const;
+
+ void Dump(FILE * = stdout) const;
+
+ RT_API_ATTRS inline bool HasAddendum() const {
+ return raw_.extra & _CFI_ADDENDUM_FLAG;
+ }
+ RT_API_ATTRS inline void SetHasAddendum() {
+ raw_.extra |= _CFI_ADDENDUM_FLAG;
+ }
+ RT_API_ATTRS inline int GetAllocIdx() const {
+ return (raw_.extra & _CFI_ALLOCATOR_IDX_MASK) >> _CFI_ALLOCATOR_IDX_SHIFT;
+ }
+ RT_API_ATTRS int MapAllocIdx() const {
+#ifdef RT_DEVICE_COMPILATION
+ // Force default allocator in device code.
+ return kDefaultAllocator;
+#else
+ return GetAllocIdx();
+#endif
+ }
+ RT_API_ATTRS inline void SetAllocIdx(int pos) {
+ raw_.extra &= ~_CFI_ALLOCATOR_IDX_MASK; // Clear the allocator index bits.
+ raw_.extra |= pos << _CFI_ALLOCATOR_IDX_SHIFT;
+ }
+
+private:
+ ISO::CFI_cdesc_t raw_;
+};
+static_assert(sizeof(Descriptor) == sizeof(ISO::CFI_cdesc_t));
+
+// Lightweight iterator-like API to simplify specialising Descriptor indexing
+// in cases where it can improve application performance. On account of the
+// purpose of this API being performance optimisation, it is up to the user to
+// do all the necessary checks to make sure the specialised variants can be used
+// safely and that Advance() is not called more times than the number of
+// elements in the Descriptor allows for.
+// Default RANK=-1 supports aray descriptors of any rank up to maxRank.
+template <int RANK = -1> class DescriptorIterator {
+private:
+ const Descriptor &descriptor;
+ SubscriptValue subscripts[maxRank];
+ std::size_t elementOffset{0};
+
+public:
+ RT_API_ATTRS DescriptorIterator(const Descriptor &descriptor)
+ : descriptor(descriptor) {
+ // We do not need the subscripts to iterate over a rank-1 array
+ if constexpr (RANK != 1) {
+ descriptor.GetLowerBounds(subscripts);
+ }
+ };
+
+ template <typename A> RT_API_ATTRS A *Get() {
+ std::size_t offset{0};
+ // The rank-1 case doesn't require looping at all
+ if constexpr (RANK == 1) {
+ offset = elementOffset;
+ // The compiler might be able to optimise this better if we know the rank
+ // at compile time
+ } else if constexpr (RANK != -1) {
+ for (int j{0}; j < RANK; ++j) {
+ offset += descriptor.SubscriptByteOffset(j, subscripts[j]);
+ }
+ // General fallback
+ } else {
+ offset = descriptor.SubscriptsToByteOffset(subscripts);
+ }
+
+ return descriptor.OffsetElement<A>(offset);
+ }
+
+ RT_API_ATTRS void Advance() {
+ if constexpr (RANK == 1) {
+ elementOffset += descriptor.GetDimension(0).ByteStride();
+ } else if constexpr (RANK != -1) {
+ for (int j{0}; j < RANK; ++j) {
+ const Dimension &dim{descriptor.GetDimension(j)};
+ if (subscripts[j]++ < dim.UpperBound()) {
+ break;
+ }
+ subscripts[j] = dim.LowerBound();
+ }
+ } else {
+ descriptor.IncrementSubscripts(subscripts);
+ }
+ }
+};
+
+// Properly configured instances of StaticDescriptor will occupy the
+// exact amount of storage required for the descriptor, its dimensional
+// information, and possible addendum. To build such a static descriptor,
+// declare an instance of StaticDescriptor<>, extract a reference to its
+// descriptor via the descriptor() accessor, and then built a Descriptor
+// therein via descriptor.Establish(), e.g.:
+// StaticDescriptor<R,A,LP> statDesc;
+// Descriptor &descriptor{statDesc.descriptor()};
+// descriptor.Establish( ... );
+template <int MAX_RANK = maxRank, bool ADDENDUM = false, int MAX_LEN_PARMS = 0>
+class alignas(Descriptor) StaticDescriptor {
+public:
+ RT_OFFLOAD_VAR_GROUP_BEGIN
+ static constexpr int maxRank{MAX_RANK};
+ static constexpr int maxLengthTypeParameters{MAX_LEN_PARMS};
+ static constexpr bool hasAddendum{ADDENDUM || MAX_LEN_PARMS > 0};
+ static constexpr std::size_t byteSize{
+ Descriptor::SizeInBytes(maxRank, hasAddendum, maxLengthTypeParameters)};
+ static_assert(byteSize <=
+ MaxDescriptorSizeInBytes(maxRank, hasAddendum, maxLengthTypeParameters));
+ RT_OFFLOAD_VAR_GROUP_END
+
+ RT_API_ATTRS Descriptor &descriptor() {
+ return *reinterpret_cast<Descriptor *>(storage_);
+ }
+ RT_API_ATTRS const Descriptor &descriptor() const {
+ return *reinterpret_cast<const Descriptor *>(storage_);
+ }
+
+ RT_API_ATTRS void Check() {
+ assert(descriptor().rank() <= maxRank);
+ assert(descriptor().SizeInBytes() <= byteSize);
+ if (DescriptorAddendum * addendum{descriptor().Addendum()}) {
+ (void)addendum;
+ assert(hasAddendum);
+ assert(addendum->LenParameters() <= maxLengthTypeParameters);
+ } else {
+ assert(!hasAddendum);
+ assert(maxLengthTypeParameters == 0);
+ }
+ descriptor().Check();
+ }
+
+private:
+ char storage_[byteSize]{};
+};
+
+// Deduction guide to avoid warnings from older versions of clang.
+StaticDescriptor() -> StaticDescriptor<maxRank, false, 0>;
+
+} // namespace Fortran::runtime
+#endif // FLANG_RT_RUNTIME_DESCRIPTOR_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/emit-encoded.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/emit-encoded.h
new file mode 100644
index 00000000000..ea83901fcc8
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/emit-encoded.h
@@ -0,0 +1,117 @@
+//===-- include/flang-rt/runtime/emit-encoded.h -----------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Templates for emitting CHARACTER values with conversion
+
+#ifndef FLANG_RT_RUNTIME_EMIT_ENCODED_H_
+#define FLANG_RT_RUNTIME_EMIT_ENCODED_H_
+
+#include "connection.h"
+#include "environment.h"
+#include "tools.h"
+#include "utf.h"
+
+namespace Fortran::runtime::io {
+
+template <typename CONTEXT, typename CHAR, bool NL_ADVANCES_RECORD = true>
+RT_API_ATTRS bool EmitEncoded(
+ CONTEXT &to, const CHAR *data, std::size_t chars) {
+ ConnectionState &connection{to.GetConnectionState()};
+ if constexpr (NL_ADVANCES_RECORD) {
+ if (connection.access == Access::Stream &&
+ connection.internalIoCharKind == 0) {
+ // Stream output: treat newlines as record advancements so that the left
+ // tab limit is correctly managed
+ while (const CHAR * nl{FindCharacter(data, CHAR{'\n'}, chars)}) {
+ auto pos{static_cast<std::size_t>(nl - data)};
+ // The [data, data + pos) does not contain the newline,
+ // so we can avoid the recursion by calling proper specialization.
+ if (!EmitEncoded<CONTEXT, CHAR, false>(to, data, pos)) {
+ return false;
+ }
+ data += pos + 1;
+ chars -= pos + 1;
+ to.AdvanceRecord();
+ }
+ }
+ }
+ if (connection.useUTF8<CHAR>()) {
+ using UnsignedChar = std::make_unsigned_t<CHAR>;
+ const UnsignedChar *uData{reinterpret_cast<const UnsignedChar *>(data)};
+ char buffer[256];
+ std::size_t at{0};
+ while (chars-- > 0) {
+ auto len{EncodeUTF8(buffer + at, *uData++)};
+ at += len;
+ if (at + maxUTF8Bytes > sizeof buffer) {
+ if (!to.Emit(buffer, at)) {
+ return false;
+ }
+ at = 0;
+ }
+ }
+ return at == 0 || to.Emit(buffer, at);
+ } else {
+ std::size_t internalKind = connection.internalIoCharKind;
+ if (internalKind == 0 || internalKind == sizeof(CHAR)) {
+ const char *rawData{reinterpret_cast<const char *>(data)};
+ return to.Emit(rawData, chars * sizeof(CHAR), sizeof(CHAR));
+ } else {
+ // CHARACTER kind conversion for internal output
+ while (chars-- > 0) {
+ char32_t buffer = static_cast<char32_t>(*data++);
+ char *p{reinterpret_cast<char *>(&buffer)};
+ if constexpr (!isHostLittleEndian) {
+ p += sizeof(buffer) - internalKind;
+ }
+ if (!to.Emit(p, internalKind)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+}
+
+template <typename CONTEXT>
+RT_API_ATTRS bool EmitAscii(CONTEXT &to, const char *data, std::size_t chars) {
+ ConnectionState &connection{to.GetConnectionState()};
+ if (connection.internalIoCharKind <= 1 &&
+ connection.access != Access::Stream) {
+ return to.Emit(data, chars);
+ } else {
+ return EmitEncoded(to, data, chars);
+ }
+}
+
+template <typename CONTEXT>
+RT_API_ATTRS bool EmitRepeated(CONTEXT &to, char ch, std::size_t n) {
+ if (n <= 0) {
+ return true;
+ }
+ ConnectionState &connection{to.GetConnectionState()};
+ if (connection.internalIoCharKind <= 1 &&
+ connection.access != Access::Stream) {
+ // faster path, no encoding needed
+ while (n-- > 0) {
+ if (!to.Emit(&ch, 1)) {
+ return false;
+ }
+ }
+ } else {
+ while (n-- > 0) {
+ if (!EmitEncoded(to, &ch, 1)) {
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+} // namespace Fortran::runtime::io
+#endif // FLANG_RT_RUNTIME_EMIT_ENCODED_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/environment.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/environment.h
new file mode 100644
index 00000000000..e579f6012ce
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/environment.h
@@ -0,0 +1,81 @@
+//===-- include/flang-rt/runtime/environment.h ------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FLANG_RT_RUNTIME_ENVIRONMENT_H_
+#define FLANG_RT_RUNTIME_ENVIRONMENT_H_
+
+#include "flang/Common/optional.h"
+#include "flang/Decimal/decimal.h"
+
+struct EnvironmentDefaultList;
+
+namespace Fortran::runtime {
+
+class Terminator;
+
+RT_OFFLOAD_VAR_GROUP_BEGIN
+#if FLANG_BIG_ENDIAN
+constexpr bool isHostLittleEndian{false};
+#elif FLANG_LITTLE_ENDIAN
+constexpr bool isHostLittleEndian{true};
+#else
+#error host endianness is not known
+#endif
+RT_OFFLOAD_VAR_GROUP_END
+
+// External unformatted I/O data conversions
+enum class Convert { Unknown, Native, LittleEndian, BigEndian, Swap };
+
+RT_API_ATTRS Fortran::common::optional<Convert> GetConvertFromString(
+ const char *, std::size_t);
+
+struct ExecutionEnvironment {
+#if !defined(_OPENMP)
+ // FIXME: https://github.com/llvm/llvm-project/issues/84942
+ constexpr
+#endif
+ ExecutionEnvironment(){};
+ void Configure(int argc, const char *argv[], const char *envp[],
+ const EnvironmentDefaultList *envDefaults);
+ const char *GetEnv(
+ const char *name, std::size_t name_length, const Terminator &terminator);
+
+ std::int32_t SetEnv(const char *name, std::size_t name_length,
+ const char *value, std::size_t value_length,
+ const Terminator &terminator);
+
+ std::int32_t UnsetEnv(
+ const char *name, std::size_t name_length, const Terminator &terminator);
+
+ int argc{0};
+ const char **argv{nullptr};
+ char **envp{nullptr};
+
+ int listDirectedOutputLineLengthLimit{79}; // FORT_FMT_RECL
+ enum decimal::FortranRounding defaultOutputRoundingMode{
+ decimal::FortranRounding::RoundNearest}; // RP(==PN)
+ Convert conversion{Convert::Unknown}; // FORT_CONVERT
+ bool noStopMessage{false}; // NO_STOP_MESSAGE=1 inhibits "Fortran STOP"
+ bool defaultUTF8{false}; // DEFAULT_UTF8
+ bool checkPointerDeallocation{true}; // FORT_CHECK_POINTER_DEALLOCATION
+
+ enum InternalDebugging { WorkQueue = 1 };
+ int internalDebugging{0}; // FLANG_RT_DEBUG
+
+ // CUDA related variables
+ std::size_t cudaStackLimit{0}; // ACC_OFFLOAD_STACK_SIZE
+ bool cudaDeviceIsManaged{false}; // NV_CUDAFOR_DEVICE_IS_MANAGED
+};
+
+RT_OFFLOAD_VAR_GROUP_BEGIN
+extern RT_VAR_ATTRS ExecutionEnvironment executionEnvironment;
+RT_OFFLOAD_VAR_GROUP_END
+
+} // namespace Fortran::runtime
+
+#endif // FLANG_RT_RUNTIME_ENVIRONMENT_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/file.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/file.h
new file mode 100644
index 00000000000..3bba29722b3
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/file.h
@@ -0,0 +1,116 @@
+//===-- include/flang-rt/runtime/file.h -------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Raw system I/O wrappers
+
+#ifndef FLANG_RT_RUNTIME_FILE_H_
+#define FLANG_RT_RUNTIME_FILE_H_
+
+#include "io-error.h"
+#include "memory.h"
+#include "flang/Common/optional.h"
+#include <cinttypes>
+
+namespace Fortran::runtime::io {
+
+enum class OpenStatus { Old, New, Scratch, Replace, Unknown };
+enum class CloseStatus { Keep, Delete };
+enum class Position { AsIs, Rewind, Append };
+enum class Action { Read, Write, ReadWrite };
+
+class OpenFile {
+public:
+ using FileOffset = std::int64_t;
+
+ const char *path() const { return path_.get(); }
+ std::size_t pathLength() const { return pathLength_; }
+ void set_path(OwningPtr<char> &&, std::size_t bytes);
+ bool mayRead() const { return mayRead_; }
+ bool mayWrite() const { return mayWrite_; }
+ bool mayPosition() const { return mayPosition_; }
+ bool mayAsynchronous() const { return mayAsynchronous_; }
+ void set_mayAsynchronous(bool yes) { mayAsynchronous_ = yes; }
+ bool isTerminal() const { return isTerminal_; }
+ bool isWindowsTextFile() const { return isWindowsTextFile_; }
+ Fortran::common::optional<FileOffset> knownSize() const { return knownSize_; }
+
+ bool IsConnected() const { return fd_ >= 0; }
+ void Open(OpenStatus, Fortran::common::optional<Action>, Position,
+ IoErrorHandler &);
+ void Predefine(int fd);
+ void Close(CloseStatus, IoErrorHandler &);
+
+ // Reads data into memory; returns amount acquired. Synchronous.
+ // Partial reads (less than minBytes) signify end-of-file. If the
+ // buffer is larger than minBytes, and extra returned data will be
+ // preserved for future consumption, set maxBytes larger than minBytes
+ // to reduce system calls This routine handles EAGAIN/EWOULDBLOCK and EINTR.
+ std::size_t Read(FileOffset, char *, std::size_t minBytes,
+ std::size_t maxBytes, IoErrorHandler &);
+
+ // Writes data. Synchronous. Partial writes indicate program-handled
+ // error conditions.
+ std::size_t Write(FileOffset, const char *, std::size_t, IoErrorHandler &);
+
+ // Truncates the file
+ void Truncate(FileOffset, IoErrorHandler &);
+
+ // Asynchronous transfers
+ int ReadAsynchronously(FileOffset, char *, std::size_t, IoErrorHandler &);
+ int WriteAsynchronously(
+ FileOffset, const char *, std::size_t, IoErrorHandler &);
+ void Wait(int id, IoErrorHandler &);
+ void WaitAll(IoErrorHandler &);
+
+ // INQUIRE(POSITION=)
+ Position InquirePosition() const;
+
+private:
+ struct Pending {
+ int id;
+ int ioStat{0};
+ OwningPtr<Pending> next;
+ };
+
+ void CheckOpen(const Terminator &);
+ bool Seek(FileOffset, IoErrorHandler &);
+ bool RawSeek(FileOffset);
+ bool RawSeekToEnd();
+ int PendingResult(const Terminator &, int);
+ void SetPosition(FileOffset pos) {
+ position_ = pos;
+ openPosition_.reset();
+ }
+ void CloseFd(IoErrorHandler &);
+
+ int fd_{-1};
+ OwningPtr<char> path_;
+ std::size_t pathLength_;
+ bool mayRead_{false};
+ bool mayWrite_{false};
+ bool mayPosition_{false};
+ bool mayAsynchronous_{false};
+ Fortran::common::optional<Position>
+ openPosition_; // from Open(); reset after positioning
+ FileOffset position_{0};
+ Fortran::common::optional<FileOffset> knownSize_;
+ bool isTerminal_{false};
+ bool isWindowsTextFile_{false}; // expands LF to CR+LF on write
+
+ int nextId_;
+ OwningPtr<Pending> pending_;
+};
+
+RT_API_ATTRS bool IsATerminal(int fd);
+RT_API_ATTRS bool IsExtant(const char *path);
+RT_API_ATTRS bool MayRead(const char *path);
+RT_API_ATTRS bool MayWrite(const char *path);
+RT_API_ATTRS bool MayReadAndWrite(const char *path);
+RT_API_ATTRS std::int64_t SizeInBytes(const char *path);
+} // namespace Fortran::runtime::io
+#endif // FLANG_RT_RUNTIME_FILE_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/format-implementation.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/format-implementation.h
new file mode 100644
index 00000000000..85dc922bc31
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/format-implementation.h
@@ -0,0 +1,613 @@
+//===-- include/flang-rt/runtime/format-implementation.h --------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Implements out-of-line member functions of template class FormatControl
+
+#ifndef FLANG_RT_RUNTIME_FORMAT_IMPLEMENTATION_H_
+#define FLANG_RT_RUNTIME_FORMAT_IMPLEMENTATION_H_
+
+#include "emit-encoded.h"
+#include "format.h"
+#include "io-stmt.h"
+#include "memory.h"
+#include "flang/Common/format.h"
+#include "flang/Decimal/decimal.h"
+#include "flang/Runtime/main.h"
+#include <algorithm>
+#include <cstring>
+#include <limits>
+
+namespace Fortran::runtime::io {
+
+template <typename CONTEXT>
+RT_API_ATTRS FormatControl<CONTEXT>::FormatControl(const Terminator &terminator,
+ const CharType *format, std::size_t formatLength,
+ const Descriptor *formatDescriptor, int maxHeight)
+ : maxHeight_{static_cast<std::uint8_t>(maxHeight)}, format_{format},
+ formatLength_{static_cast<int>(formatLength)} {
+ RUNTIME_CHECK(terminator, maxHeight == maxHeight_);
+ if (!format && formatDescriptor) {
+ // The format is a character array passed via a descriptor.
+ std::size_t elements{formatDescriptor->Elements()};
+ std::size_t elementBytes{formatDescriptor->ElementBytes()};
+ formatLength = elements * elementBytes / sizeof(CharType);
+ formatLength_ = static_cast<int>(formatLength);
+ if (formatDescriptor->IsContiguous()) {
+ // Treat the contiguous array as a single character value.
+ format_ = const_cast<const CharType *>(
+ reinterpret_cast<CharType *>(formatDescriptor->raw().base_addr));
+ } else {
+ // Concatenate its elements into a temporary array.
+ char *p{reinterpret_cast<char *>(
+ AllocateMemoryOrCrash(terminator, formatLength * sizeof(CharType)))};
+ format_ = p;
+ SubscriptValue at[maxRank];
+ formatDescriptor->GetLowerBounds(at);
+ for (std::size_t j{0}; j < elements; ++j) {
+ std::memcpy(p, formatDescriptor->Element<char>(at), elementBytes);
+ p += elementBytes;
+ formatDescriptor->IncrementSubscripts(at);
+ }
+ freeFormat_ = true;
+ }
+ }
+ RUNTIME_CHECK(
+ terminator, formatLength == static_cast<std::size_t>(formatLength_));
+ stack_[0].start = offset_;
+ stack_[0].remaining = Iteration::unlimited; // 13.4(8)
+}
+
+template <typename CONTEXT>
+RT_API_ATTRS int FormatControl<CONTEXT>::GetIntField(
+ IoErrorHandler &handler, CharType firstCh, bool *hadError) {
+ CharType ch{firstCh ? firstCh : PeekNext()};
+ bool negate{ch == '-'};
+ if (negate || ch == '+') {
+ if (firstCh) {
+ firstCh = '\0';
+ } else {
+ ++offset_;
+ }
+ ch = PeekNext();
+ }
+ if (ch < '0' || ch > '9') {
+ handler.SignalError(IostatErrorInFormat,
+ "Invalid FORMAT: integer expected at '%c'", static_cast<char>(ch));
+ if (hadError) {
+ *hadError = true;
+ }
+ return 0;
+ }
+ int result{0};
+ while (ch >= '0' && ch <= '9') {
+ constexpr int tenth{std::numeric_limits<int>::max() / 10};
+ if (result > tenth ||
+ ch - '0' > std::numeric_limits<int>::max() - 10 * result) {
+ handler.SignalError(
+ IostatErrorInFormat, "FORMAT integer field out of range");
+ if (hadError) {
+ *hadError = true;
+ }
+ return result;
+ }
+ result = 10 * result + ch - '0';
+ if (firstCh) {
+ firstCh = '\0';
+ } else {
+ ++offset_;
+ }
+ ch = PeekNext();
+ }
+ if (negate && (result *= -1) > 0) {
+ handler.SignalError(
+ IostatErrorInFormat, "FORMAT integer field out of range");
+ if (hadError) {
+ *hadError = true;
+ }
+ }
+ return result;
+}
+
+// Xn, TRn, TLn
+template <typename CONTEXT>
+static RT_API_ATTRS bool RelativeTabbing(CONTEXT &context, int n) {
+ ConnectionState &connection{context.GetConnectionState()};
+ if constexpr (std::is_same_v<CONTEXT,
+ ExternalFormattedIoStatementState<Direction::Input>> ||
+ std::is_same_v<CONTEXT,
+ ExternalFormattedIoStatementState<Direction::Output>>) {
+ if (n != 0 && connection.isUTF8) {
+ const char *p{};
+ if (n > 0) { // Xn or TRn
+ // Skip 'n' multi-byte characters. If that's more than are in the
+ // current record, that's valid -- the program can position past the
+ // end and then reposition back with Tn or TLn.
+ std::size_t bytesLeft{context.ViewBytesInRecord(p, true)};
+ for (; n > 0 && bytesLeft && p; --n) {
+ std::size_t byteCount{MeasureUTF8Bytes(*p)};
+ if (byteCount > bytesLeft) {
+ break;
+ }
+ context.HandleRelativePosition(byteCount);
+ bytesLeft -= byteCount;
+ // Don't call GotChar(byteCount), these don't count towards SIZE=
+ p += byteCount;
+ }
+ } else { // n < 0: TLn
+ n = -n;
+ if (std::int64_t excess{connection.positionInRecord -
+ connection.recordLength.value_or(connection.positionInRecord)};
+ excess > 0) {
+ // Have tabbed past the end of the record
+ if (excess >= n) {
+ context.HandleRelativePosition(-n);
+ return true;
+ }
+ context.HandleRelativePosition(-excess);
+ n -= excess;
+ }
+ std::size_t bytesLeft{context.ViewBytesInRecord(p, false)};
+ // Go back 'n' multi-byte characters.
+ for (; n > 0 && bytesLeft && p; --n) {
+ std::size_t byteCount{MeasurePreviousUTF8Bytes(p, bytesLeft)};
+ context.HandleRelativePosition(-byteCount);
+ bytesLeft -= byteCount;
+ p -= byteCount;
+ }
+ }
+ }
+ }
+ if (connection.internalIoCharKind > 1) {
+ n *= connection.internalIoCharKind;
+ }
+ context.HandleRelativePosition(n);
+ return true;
+}
+
+// Tn
+template <typename CONTEXT>
+static RT_API_ATTRS bool AbsoluteTabbing(CONTEXT &context, int n) {
+ ConnectionState &connection{context.GetConnectionState()};
+ n = n > 0 ? n - 1 : 0; // convert 1-based position to 0-based offset
+ if constexpr (std::is_same_v<CONTEXT,
+ ExternalFormattedIoStatementState<Direction::Input>> ||
+ std::is_same_v<CONTEXT,
+ ExternalFormattedIoStatementState<Direction::Output>>) {
+ if (connection.isUTF8) {
+ // Reset to the beginning of the record, then TR(n-1)
+ connection.HandleAbsolutePosition(0);
+ return RelativeTabbing(context, n);
+ }
+ }
+ if (connection.internalIoCharKind > 1) {
+ n *= connection.internalIoCharKind;
+ }
+ context.HandleAbsolutePosition(n);
+ return true;
+}
+
+template <typename CONTEXT>
+static RT_API_ATTRS void HandleControl(
+ CONTEXT &context, char ch, char next, int n) {
+ MutableModes &modes{context.mutableModes()};
+ switch (ch) {
+ case 'B':
+ if (next == 'Z') {
+ modes.editingFlags |= blankZero;
+ return;
+ }
+ if (next == 'N') {
+ modes.editingFlags &= ~blankZero;
+ return;
+ }
+ break;
+ case 'D':
+ if (next == 'C') {
+ modes.editingFlags |= decimalComma;
+ return;
+ }
+ if (next == 'P') {
+ modes.editingFlags &= ~decimalComma;
+ return;
+ }
+ break;
+ case 'P':
+ if (!next) {
+ modes.scale = n; // kP - decimal scaling by 10**k
+ return;
+ }
+ break;
+ case 'R':
+ switch (next) {
+ case 'N':
+ modes.round = decimal::RoundNearest;
+ return;
+ case 'Z':
+ modes.round = decimal::RoundToZero;
+ return;
+ case 'U':
+ modes.round = decimal::RoundUp;
+ return;
+ case 'D':
+ modes.round = decimal::RoundDown;
+ return;
+ case 'C':
+ modes.round = decimal::RoundCompatible;
+ return;
+ case 'P':
+ modes.round = executionEnvironment.defaultOutputRoundingMode;
+ return;
+ default:
+ break;
+ }
+ break;
+ case 'X':
+ if (!next && RelativeTabbing(context, n)) {
+ return;
+ }
+ break;
+ case 'S':
+ if (next == 'P') {
+ modes.editingFlags |= signPlus;
+ return;
+ }
+ if (!next || next == 'S') {
+ modes.editingFlags &= ~signPlus;
+ return;
+ }
+ break;
+ case 'T': {
+ if (!next) { // Tn
+ if (AbsoluteTabbing(context, n)) {
+ return;
+ }
+ } else if (next == 'R' || next == 'L') { // TRn / TLn
+ if (RelativeTabbing(context, next == 'L' ? -n : n)) {
+ return;
+ }
+ }
+ } break;
+ default:
+ break;
+ }
+ if (next) {
+ context.SignalError(IostatErrorInFormat,
+ "Unknown '%c%c' edit descriptor in FORMAT", ch, next);
+ } else {
+ context.SignalError(
+ IostatErrorInFormat, "Unknown '%c' edit descriptor in FORMAT", ch);
+ }
+}
+
+// Locates the next data edit descriptor in the format.
+// Handles all repetition counts and control edit descriptors.
+// Generally assumes that the format string has survived the common
+// format validator gauntlet.
+template <typename CONTEXT>
+RT_API_ATTRS int FormatControl<CONTEXT>::CueUpNextDataEdit(
+ Context &context, bool stop) {
+ bool hitUnlimitedLoopEnd{false};
+ // Do repetitions remain on an unparenthesized data edit?
+ while (height_ > 1 && format_[stack_[height_ - 1].start] != '(') {
+ offset_ = stack_[height_ - 1].start;
+ int repeat{stack_[height_ - 1].remaining};
+ --height_;
+ if (repeat > 0) {
+ return repeat;
+ }
+ }
+ while (true) {
+ Fortran::common::optional<int> repeat;
+ bool unlimited{false};
+ auto maybeReversionPoint{offset_};
+ CharType ch{GetNextChar(context)};
+ while (ch == ',' || ch == ':') {
+ // Skip commas, and don't complain if they're missing; the format
+ // validator does that.
+ if (stop && ch == ':') {
+ return 0;
+ }
+ ch = GetNextChar(context);
+ }
+ if (ch == '-' || ch == '+' || (ch >= '0' && ch <= '9')) {
+ bool hadSign{ch == '-' || ch == '+'};
+ repeat = GetIntField(context, ch);
+ ch = GetNextChar(context);
+ if (hadSign && ch != 'p' && ch != 'P') {
+ ReportBadFormat(context,
+ "Invalid FORMAT: signed integer may appear only before 'P",
+ maybeReversionPoint);
+ return 0;
+ }
+ } else if (ch == '*') {
+ unlimited = true;
+ ch = GetNextChar(context);
+ if (ch != '(') {
+ ReportBadFormat(context,
+ "Invalid FORMAT: '*' may appear only before '('",
+ maybeReversionPoint);
+ return 0;
+ }
+ if (height_ != 1) {
+ ReportBadFormat(context,
+ "Invalid FORMAT: '*' must be nested in exactly one set of "
+ "parentheses",
+ maybeReversionPoint);
+ return 0;
+ }
+ }
+ ch = Capitalize(ch);
+ if (ch == '(') {
+ if (height_ >= maxHeight_) {
+ ReportBadFormat(context,
+ "FORMAT stack overflow: too many nested parentheses",
+ maybeReversionPoint);
+ return 0;
+ }
+ stack_[height_].start = offset_ - 1; // the '('
+ RUNTIME_CHECK(context, format_[stack_[height_].start] == '(');
+ if (unlimited || height_ == 0) {
+ stack_[height_].remaining = Iteration::unlimited;
+ } else if (repeat) {
+ if (*repeat <= 0) {
+ *repeat = 1; // error recovery
+ }
+ stack_[height_].remaining = *repeat - 1;
+ } else {
+ stack_[height_].remaining = 0;
+ }
+ if (height_ == 1 && !hitEnd_) {
+ // Subtle point (F'2018 13.4 para 9): the last parenthesized group
+ // at height 1 becomes the restart point after control reaches the
+ // end of the format, including its repeat count.
+ stack_[0].start = maybeReversionPoint;
+ }
+ ++height_;
+ } else if (height_ == 0) {
+ ReportBadFormat(context, "FORMAT lacks initial '('", maybeReversionPoint);
+ return 0;
+ } else if (ch == ')') {
+ if (height_ == 1) {
+ hitEnd_ = true;
+ if (stop) {
+ return 0; // end of FORMAT and no data items remain
+ }
+ context.AdvanceRecord(); // implied / before rightmost )
+ }
+ auto restart{stack_[height_ - 1].start};
+ if (format_[restart] == '(') {
+ ++restart;
+ }
+ if (stack_[height_ - 1].remaining == Iteration::unlimited) {
+ if (height_ > 1 && GetNextChar(context) != ')') {
+ ReportBadFormat(context,
+ "Unlimited repetition in FORMAT may not be followed by more "
+ "items",
+ restart);
+ return 0;
+ }
+ if (hitUnlimitedLoopEnd) {
+ ReportBadFormat(context,
+ "Unlimited repetition in FORMAT lacks data edit descriptors",
+ restart);
+ return 0;
+ }
+ hitUnlimitedLoopEnd = true;
+ offset_ = restart;
+ } else if (stack_[height_ - 1].remaining-- > 0) {
+ offset_ = restart;
+ } else {
+ --height_;
+ }
+ } else if (ch == '\'' || ch == '"') {
+ // Quoted 'character literal'
+ CharType quote{ch};
+ auto start{offset_};
+ while (offset_ < formatLength_ && format_[offset_] != quote) {
+ ++offset_;
+ }
+ if (offset_ >= formatLength_) {
+ ReportBadFormat(context,
+ "FORMAT missing closing quote on character literal",
+ maybeReversionPoint);
+ return 0;
+ }
+ ++offset_;
+ std::size_t chars{
+ static_cast<std::size_t>(&format_[offset_] - &format_[start])};
+ if (offset_ < formatLength_ && format_[offset_] == quote) {
+ // subtle: handle doubled quote character in a literal by including
+ // the first in the output, then treating the second as the start
+ // of another character literal.
+ } else {
+ --chars;
+ }
+ if constexpr (std::is_base_of_v<InputStatementState, CONTEXT>) {
+ context.HandleRelativePosition(chars);
+ } else {
+ EmitAscii(context, format_ + start, chars);
+ }
+ } else if (ch == 'H') {
+ // 9HHOLLERITH
+ if (!repeat || *repeat < 1 || offset_ + *repeat > formatLength_) {
+ ReportBadFormat(context, "Invalid width on Hollerith in FORMAT",
+ maybeReversionPoint);
+ return 0;
+ }
+ if constexpr (std::is_base_of_v<InputStatementState, CONTEXT>) {
+ context.HandleRelativePosition(static_cast<std::size_t>(*repeat));
+ } else {
+ EmitAscii(
+ context, format_ + offset_, static_cast<std::size_t>(*repeat));
+ }
+ offset_ += *repeat;
+ } else if (ch >= 'A' && ch <= 'Z') {
+ int start{offset_ - 1};
+ CharType next{'\0'};
+ if (ch != 'P') { // 1PE5.2 - comma not required (C1302)
+ CharType peek{Capitalize(PeekNext())};
+ if (peek >= 'A' && peek <= 'Z') {
+ if ((ch == 'A' && peek == 'T' /* anticipate F'202X AT editing */) ||
+ ch == 'B' || ch == 'D' || ch == 'E' || ch == 'R' || ch == 'S' ||
+ ch == 'T') {
+ // Assume a two-letter edit descriptor
+ next = peek;
+ ++offset_;
+ } else {
+ // extension: assume a comma between 'ch' and 'peek'
+ }
+ }
+ }
+ if ((!next &&
+ (ch == 'A' || ch == 'I' || ch == 'B' || ch == 'E' || ch == 'D' ||
+ ch == 'O' || ch == 'Z' || ch == 'F' || ch == 'G' ||
+ ch == 'L')) ||
+ (ch == 'E' && (next == 'N' || next == 'S' || next == 'X')) ||
+ (ch == 'D' && next == 'T')) {
+ // Data edit descriptor found
+ offset_ = start;
+ return repeat && *repeat > 0 ? *repeat : 1;
+ } else {
+ // Control edit descriptor
+ if (ch == 'T') { // Tn, TLn, TRn
+ repeat = GetIntField(context);
+ }
+ HandleControl(context, static_cast<char>(ch), static_cast<char>(next),
+ repeat ? *repeat : 1);
+ }
+ } else if (ch == '/') {
+ context.AdvanceRecord(repeat && *repeat > 0 ? *repeat : 1);
+ } else if (ch == '$' || ch == '\\') {
+ context.mutableModes().nonAdvancing = true;
+ } else if (ch == '\t' || ch == '\v') {
+ // Tabs (extension)
+ // TODO: any other raw characters?
+ EmitAscii(context, format_ + offset_ - 1, 1);
+ } else {
+ ReportBadFormat(
+ context, "Invalid character in FORMAT", maybeReversionPoint);
+ return 0;
+ }
+ }
+}
+
+// Returns the next data edit descriptor
+template <typename CONTEXT>
+RT_API_ATTRS Fortran::common::optional<DataEdit>
+FormatControl<CONTEXT>::GetNextDataEdit(Context &context, int maxRepeat) {
+ int repeat{CueUpNextDataEdit(context)};
+ auto start{offset_};
+ DataEdit edit;
+ edit.modes = context.mutableModes();
+ // Handle repeated nonparenthesized edit descriptors
+ edit.repeat = std::min(repeat, maxRepeat); // 0 if maxRepeat==0
+ if (repeat > maxRepeat) {
+ stack_[height_].start = start; // after repeat count
+ stack_[height_].remaining = repeat - edit.repeat;
+ ++height_;
+ }
+ edit.descriptor = static_cast<char>(Capitalize(GetNextChar(context)));
+ if (edit.descriptor == 'D' && Capitalize(PeekNext()) == 'T') {
+ // DT['iotype'][(v_list)] defined I/O
+ edit.descriptor = DataEdit::DefinedDerivedType;
+ ++offset_;
+ if (auto quote{static_cast<char>(PeekNext())};
+ quote == '\'' || quote == '"') {
+ // Capture the quoted 'iotype'
+ bool ok{false};
+ for (++offset_; offset_ < formatLength_;) {
+ auto ch{static_cast<char>(format_[offset_++])};
+ if (ch == quote &&
+ (offset_ == formatLength_ ||
+ static_cast<char>(format_[offset_]) != quote)) {
+ ok = true;
+ break; // that was terminating quote
+ }
+ if (edit.ioTypeChars >= edit.maxIoTypeChars) {
+ ReportBadFormat(context, "Excessive DT'iotype' in FORMAT", start);
+ return Fortran::common::nullopt;
+ }
+ edit.ioType[edit.ioTypeChars++] = ch;
+ if (ch == quote) {
+ ++offset_;
+ }
+ }
+ if (!ok) {
+ ReportBadFormat(context, "Unclosed DT'iotype' in FORMAT", start);
+ return Fortran::common::nullopt;
+ }
+ }
+ if (PeekNext() == '(') {
+ // Capture the v_list arguments
+ bool ok{false};
+ for (++offset_; offset_ < formatLength_;) {
+ bool hadError{false};
+ int n{GetIntField(context, '\0', &hadError)};
+ if (hadError) {
+ ok = false;
+ break;
+ }
+ if (edit.vListEntries >= edit.maxVListEntries) {
+ ReportBadFormat(context, "Excessive DT(v_list) in FORMAT", start);
+ return Fortran::common::nullopt;
+ }
+ edit.vList[edit.vListEntries++] = n;
+ auto ch{static_cast<char>(GetNextChar(context))};
+ if (ch != ',') {
+ ok = ch == ')';
+ break;
+ }
+ }
+ if (!ok) {
+ ReportBadFormat(context, "Unclosed DT(v_list) in FORMAT", start);
+ return Fortran::common::nullopt;
+ }
+ }
+ } else { // not DT'iotype'
+ if (edit.descriptor == 'E') {
+ if (auto next{static_cast<char>(Capitalize(PeekNext()))};
+ next == 'N' || next == 'S' || next == 'X') {
+ edit.variation = next;
+ ++offset_;
+ }
+ }
+ // Width is optional for A[w] in the standard and optional
+ // for Lw in most compilers.
+ // Intel & (presumably, from bug report) Fujitsu allow
+ // a missing 'w' & 'd'/'m' for other edit descriptors -- but not
+ // 'd'/'m' with a missing 'w' -- and so interpret "(E)" as "(E0)".
+ if (CharType ch{PeekNext()}; (ch >= '0' && ch <= '9') || ch == '.') {
+ edit.width = GetIntField(context);
+ if constexpr (std::is_base_of_v<InputStatementState, CONTEXT>) {
+ if (edit.width.value_or(-1) == 0) {
+ ReportBadFormat(context, "Input field width is zero", start);
+ }
+ }
+ if (PeekNext() == '.') {
+ ++offset_;
+ edit.digits = GetIntField(context);
+ if (CharType ch{PeekNext()};
+ ch == 'e' || ch == 'E' || ch == 'd' || ch == 'D') {
+ ++offset_;
+ edit.expoDigits = GetIntField(context);
+ }
+ }
+ }
+ }
+ return edit;
+}
+
+template <typename CONTEXT>
+RT_API_ATTRS void FormatControl<CONTEXT>::Finish(Context &context) {
+ CueUpNextDataEdit(context, true /* stop at colon or end of FORMAT */);
+ if (freeFormat_) {
+ FreeMemory(const_cast<CharType *>(format_));
+ }
+}
+} // namespace Fortran::runtime::io
+#endif // FLANG_RT_RUNTIME_FORMAT_IMPLEMENTATION_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/format.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/format.h
new file mode 100644
index 00000000000..9469cb0ee9a
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/format.h
@@ -0,0 +1,209 @@
+//===-- include/flang-rt/runtime/format.h -----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// FORMAT string processing
+
+#ifndef FLANG_RT_RUNTIME_FORMAT_H_
+#define FLANG_RT_RUNTIME_FORMAT_H_
+
+#include "environment.h"
+#include "io-error.h"
+#include "flang/Common/Fortran-consts.h"
+#include "flang/Common/optional.h"
+#include "flang/Decimal/decimal.h"
+#include "flang/Runtime/freestanding-tools.h"
+#include <cinttypes>
+
+namespace Fortran::runtime {
+class Descriptor;
+} // namespace Fortran::runtime
+
+namespace Fortran::runtime::io {
+
+RT_OFFLOAD_API_GROUP_BEGIN
+
+class IoStatementState;
+
+enum EditingFlags {
+ blankZero = 1, // BLANK=ZERO or BZ edit
+ decimalComma = 2, // DECIMAL=COMMA or DC edit
+ signPlus = 4, // SIGN=PLUS or SP edit
+};
+
+struct MutableModes {
+ std::uint8_t editingFlags{0}; // BN, DP, SS
+ enum decimal::FortranRounding round{
+ executionEnvironment
+ .defaultOutputRoundingMode}; // RP/ROUND='PROCESSOR_DEFAULT'
+ bool pad{true}; // PAD= mode on READ
+ char delim{'\0'}; // DELIM=
+ short scale{0}; // kP
+ bool inNamelist{false}; // skip ! comments
+ bool nonAdvancing{false}; // ADVANCE='NO', or $ or \ in FORMAT
+};
+
+// A single edit descriptor extracted from a FORMAT
+struct DataEdit {
+ char descriptor; // capitalized: one of A, I, B, O, Z, F, E(N/S/X), D, G
+
+ // Special internal data edit descriptors for list-directed & NAMELIST I/O
+ RT_OFFLOAD_VAR_GROUP_BEGIN
+ static constexpr char ListDirected{'g'}; // non-COMPLEX list-directed
+ static constexpr char ListDirectedRealPart{'r'}; // emit "(r," or "(r;"
+ static constexpr char ListDirectedImaginaryPart{'z'}; // emit "z)"
+ static constexpr char ListDirectedNullValue{'n'}; // see 13.10.3.2
+ static constexpr char DefinedDerivedType{'d'}; // DT defined I/O
+ RT_OFFLOAD_VAR_GROUP_END
+ constexpr RT_API_ATTRS bool IsListDirected() const {
+ return descriptor == ListDirected || descriptor == ListDirectedRealPart ||
+ descriptor == ListDirectedImaginaryPart;
+ }
+ constexpr RT_API_ATTRS bool IsNamelist() const {
+ return IsListDirected() && modes.inNamelist;
+ }
+
+ char variation{'\0'}; // N, S, or X for EN, ES, EX; G/l for original G/list
+ Fortran::common::optional<int> width; // the 'w' field; optional for A
+ Fortran::common::optional<int> digits; // the 'm' or 'd' field
+ Fortran::common::optional<int> expoDigits; // 'Ee' field
+ MutableModes modes;
+ int repeat{1};
+
+ // "iotype" &/or "v_list" values for a DT'iotype'(v_list)
+ // defined I/O data edit descriptor
+ RT_OFFLOAD_VAR_GROUP_BEGIN
+ static constexpr std::size_t maxIoTypeChars{32};
+ static constexpr std::size_t maxVListEntries{4};
+ RT_OFFLOAD_VAR_GROUP_END
+ std::uint8_t ioTypeChars{0};
+ std::uint8_t vListEntries{0};
+ char ioType[maxIoTypeChars];
+ int vList[maxVListEntries];
+};
+
+// Generates a sequence of DataEdits from a FORMAT statement or
+// default-CHARACTER string. Driven by I/O item list processing.
+// Errors are fatal. See subclause 13.4 in Fortran 2018 for background.
+template <typename CONTEXT> class FormatControl {
+public:
+ using Context = CONTEXT;
+ using CharType = char; // formats are always default kind CHARACTER
+
+ RT_API_ATTRS FormatControl() {}
+ RT_API_ATTRS FormatControl(const Terminator &, const CharType *format,
+ std::size_t formatLength, const Descriptor *formatDescriptor = nullptr,
+ int maxHeight = maxMaxHeight);
+
+ // For attempting to allocate in a user-supplied stack area
+ static RT_API_ATTRS std::size_t GetNeededSize(int maxHeight) {
+ return sizeof(FormatControl) -
+ sizeof(Iteration) * (maxMaxHeight - maxHeight);
+ }
+
+ // Extracts the next data edit descriptor, handling control edit descriptors
+ // along the way. If maxRepeat==0, this is a peek at the next data edit
+ // descriptor.
+ RT_API_ATTRS Fortran::common::optional<DataEdit> GetNextDataEdit(
+ Context &, int maxRepeat = 1);
+
+ // Emit any remaining character literals after the last data item (on output)
+ // and perform remaining record positioning actions.
+ RT_API_ATTRS void Finish(Context &);
+
+private:
+ RT_OFFLOAD_VAR_GROUP_BEGIN
+ static constexpr std::uint8_t maxMaxHeight{100};
+
+ struct Iteration {
+ static constexpr int unlimited{-1};
+ int start{0}; // offset in format_ of '(' or a repeated edit descriptor
+ int remaining{0}; // while >0, decrement and iterate
+ };
+ RT_OFFLOAD_VAR_GROUP_END
+
+ RT_API_ATTRS void SkipBlanks() {
+ while (offset_ < formatLength_ &&
+ (format_[offset_] == ' ' || format_[offset_] == '\t' ||
+ format_[offset_] == '\v')) {
+ ++offset_;
+ }
+ }
+ RT_API_ATTRS CharType PeekNext() {
+ SkipBlanks();
+ return offset_ < formatLength_ ? format_[offset_] : '\0';
+ }
+ RT_API_ATTRS CharType GetNextChar(IoErrorHandler &handler) {
+ SkipBlanks();
+ if (offset_ >= formatLength_) {
+ if (formatLength_ == 0) {
+ handler.SignalError(
+ IostatErrorInFormat, "Empty or badly assigned FORMAT");
+ } else {
+ handler.SignalError(
+ IostatErrorInFormat, "FORMAT missing at least one ')'");
+ }
+ return '\n';
+ }
+ return format_[offset_++];
+ }
+ RT_API_ATTRS int GetIntField(
+ IoErrorHandler &, CharType firstCh = '\0', bool *hadError = nullptr);
+
+ // Advances through the FORMAT until the next data edit
+ // descriptor has been found; handles control edit descriptors
+ // along the way. Returns the repeat count that appeared
+ // before the descriptor (defaulting to 1) and leaves offset_
+ // pointing to the data edit.
+ RT_API_ATTRS int CueUpNextDataEdit(Context &, bool stop = false);
+
+ static constexpr RT_API_ATTRS CharType Capitalize(CharType ch) {
+ return ch >= 'a' && ch <= 'z' ? ch + 'A' - 'a' : ch;
+ }
+
+ RT_API_ATTRS void ReportBadFormat(
+ Context &context, const char *msg, int offset) const {
+ if constexpr (std::is_same_v<CharType, char>) {
+ // Echo the bad format in the error message, but trim any leading or
+ // trailing spaces.
+ int firstNonBlank{0};
+ while (firstNonBlank < formatLength_ && format_[firstNonBlank] == ' ') {
+ ++firstNonBlank;
+ }
+ int lastNonBlank{formatLength_ - 1};
+ while (lastNonBlank > firstNonBlank && format_[lastNonBlank] == ' ') {
+ --lastNonBlank;
+ }
+ if (firstNonBlank <= lastNonBlank) {
+ context.SignalError(IostatErrorInFormat,
+ "%s; at offset %d in format '%.*s'", msg, offset,
+ lastNonBlank - firstNonBlank + 1, format_ + firstNonBlank);
+ return;
+ }
+ }
+ context.SignalError(IostatErrorInFormat, "%s; at offset %d", msg, offset);
+ }
+
+ // Data members are arranged and typed so as to reduce size.
+ // This structure may be allocated in stack space loaned by the
+ // user program for internal I/O.
+ const std::uint8_t maxHeight_{maxMaxHeight};
+ std::uint8_t height_{0};
+ bool freeFormat_{false};
+ bool hitEnd_{false};
+ const CharType *format_{nullptr};
+ int formatLength_{0}; // in units of characters
+ int offset_{0}; // next item is at format_[offset_]
+
+ // must be last, may be incomplete
+ Iteration stack_[maxMaxHeight];
+};
+
+RT_OFFLOAD_API_GROUP_END
+
+} // namespace Fortran::runtime::io
+#endif // FLANG_RT_RUNTIME_FORMAT_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/internal-unit.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/internal-unit.h
new file mode 100644
index 00000000000..a046764153a
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/internal-unit.h
@@ -0,0 +1,64 @@
+//===-- include/flang-rt/runtime/internal-unit.h ----------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Fortran internal I/O "units"
+
+#ifndef FLANG_RT_RUNTIME_INTERNAL_UNIT_H_
+#define FLANG_RT_RUNTIME_INTERNAL_UNIT_H_
+
+#include "connection.h"
+#include "descriptor.h"
+#include <cinttypes>
+#include <type_traits>
+
+namespace Fortran::runtime::io {
+
+RT_OFFLOAD_API_GROUP_BEGIN
+
+class IoErrorHandler;
+
+// Points to (but does not own) a CHARACTER scalar or array for internal I/O.
+// Does not buffer.
+template <Direction DIR> class InternalDescriptorUnit : public ConnectionState {
+public:
+ using Scalar =
+ std::conditional_t<DIR == Direction::Input, const char *, char *>;
+ RT_API_ATTRS InternalDescriptorUnit(Scalar, std::size_t chars, int kind);
+ RT_API_ATTRS InternalDescriptorUnit(const Descriptor &, const Terminator &);
+
+ RT_API_ATTRS bool Emit(const char *, std::size_t, IoErrorHandler &);
+ RT_API_ATTRS std::size_t GetNextInputBytes(const char *&, IoErrorHandler &);
+ RT_API_ATTRS std::size_t ViewBytesInRecord(const char *&, bool forward) const;
+ RT_API_ATTRS bool AdvanceRecord(IoErrorHandler &);
+ RT_API_ATTRS void BackspaceRecord(IoErrorHandler &);
+ RT_API_ATTRS std::int64_t InquirePos();
+
+private:
+ RT_API_ATTRS Descriptor &descriptor() {
+ return staticDescriptor_.descriptor();
+ }
+ RT_API_ATTRS const Descriptor &descriptor() const {
+ return staticDescriptor_.descriptor();
+ }
+ RT_API_ATTRS Scalar CurrentRecord() const {
+ return descriptor().template ZeroBasedIndexedElement<char>(
+ currentRecordNumber - 1);
+ }
+ RT_API_ATTRS void BlankFill(char *, std::size_t);
+ RT_API_ATTRS void BlankFillOutputRecord();
+
+ StaticDescriptor<maxRank, true /*addendum*/> staticDescriptor_;
+};
+
+extern template class InternalDescriptorUnit<Direction::Output>;
+extern template class InternalDescriptorUnit<Direction::Input>;
+
+RT_OFFLOAD_API_GROUP_END
+
+} // namespace Fortran::runtime::io
+#endif // FLANG_RT_RUNTIME_INTERNAL_UNIT_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/io-error.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/io-error.h
new file mode 100644
index 00000000000..1cef6a208f3
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/io-error.h
@@ -0,0 +1,83 @@
+//===-- include/flang-rt/runtime/io-error.h ---------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Distinguishes I/O error conditions; fatal ones lead to termination,
+// and those that the user program has chosen to handle are recorded
+// so that the highest-priority one can be returned as IOSTAT=.
+// IOSTAT error codes are raw errno values augmented with values for
+// Fortran-specific errors.
+
+#ifndef FLANG_RT_RUNTIME_IO_ERROR_H_
+#define FLANG_RT_RUNTIME_IO_ERROR_H_
+
+#include "memory.h"
+#include "terminator.h"
+#include "flang/Runtime/iostat.h"
+#include <cinttypes>
+
+namespace Fortran::runtime::io {
+
+// See 12.11 in Fortran 2018
+class IoErrorHandler : public Terminator {
+public:
+ using Terminator::Terminator;
+ explicit RT_API_ATTRS IoErrorHandler(const Terminator &that)
+ : Terminator{that} {}
+ RT_API_ATTRS void HasIoStat() { flags_ |= hasIoStat; }
+ RT_API_ATTRS void HasErrLabel() { flags_ |= hasErr; }
+ RT_API_ATTRS void HasEndLabel() { flags_ |= hasEnd; }
+ RT_API_ATTRS void HasEorLabel() { flags_ |= hasEor; }
+ RT_API_ATTRS void HasIoMsg() { flags_ |= hasIoMsg; }
+ RT_API_ATTRS void HasRec() { flags_ |= hasRec; }
+
+ RT_API_ATTRS bool InError() const {
+ return ioStat_ != IostatOk || pendingError_ != IostatOk;
+ }
+
+ // For I/O statements that detect fatal errors in their
+ // Begin...() API routines before it is known whether they
+ // have error handling control list items. Such statements
+ // have an ErroneousIoStatementState with a pending error.
+ RT_API_ATTRS void SetPendingError(int iostat) { pendingError_ = iostat; }
+
+ RT_API_ATTRS void SignalError(int iostatOrErrno, const char *msg, ...);
+ RT_API_ATTRS void SignalError(int iostatOrErrno);
+ template <typename... X>
+ RT_API_ATTRS void SignalError(const char *msg, X &&...xs) {
+ SignalError(IostatGenericError, msg, std::forward<X>(xs)...);
+ }
+
+ RT_API_ATTRS void Forward(int iostatOrErrno, const char *, std::size_t);
+
+ void SignalErrno(); // SignalError(errno)
+ RT_API_ATTRS void
+ SignalEnd(); // input only; EOF on internal write is an error
+ RT_API_ATTRS void
+ SignalEor(); // non-advancing input only; EOR on write is an error
+ RT_API_ATTRS void SignalPendingError();
+
+ RT_API_ATTRS int GetIoStat() const { return ioStat_; }
+ RT_API_ATTRS bool GetIoMsg(char *, std::size_t);
+
+private:
+ enum Flag : std::uint8_t {
+ hasIoStat = 1, // IOSTAT=
+ hasErr = 2, // ERR=
+ hasEnd = 4, // END=
+ hasEor = 8, // EOR=
+ hasIoMsg = 16, // IOMSG=
+ hasRec = 32, // REC=
+ };
+ std::uint8_t flags_{0};
+ int ioStat_{IostatOk};
+ OwningPtr<char> ioMsg_;
+ int pendingError_{IostatOk};
+};
+
+} // namespace Fortran::runtime::io
+#endif // FLANG_RT_RUNTIME_IO_ERROR_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/io-stmt.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/io-stmt.h
new file mode 100644
index 00000000000..bfd5f69c763
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/io-stmt.h
@@ -0,0 +1,888 @@
+//===-- include/flang-rt/runtime/io-stmt.h ----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Representations of the state of an I/O statement in progress
+
+#ifndef FLANG_RT_RUNTIME_IO_STMT_H_
+#define FLANG_RT_RUNTIME_IO_STMT_H_
+
+#include "connection.h"
+#include "descriptor.h"
+#include "file.h"
+#include "format.h"
+#include "internal-unit.h"
+#include "io-error.h"
+#include "flang/Common/optional.h"
+#include "flang/Common/reference-wrapper.h"
+#include "flang/Common/visit.h"
+#include "flang/Runtime/freestanding-tools.h"
+#include "flang/Runtime/io-api.h"
+#include <flang/Common/variant.h>
+#include <functional>
+#include <type_traits>
+
+namespace Fortran::runtime::io {
+
+RT_OFFLOAD_API_GROUP_BEGIN
+
+class ExternalFileUnit;
+class ChildIo;
+
+class OpenStatementState;
+class InquireUnitState;
+class InquireNoUnitState;
+class InquireUnconnectedFileState;
+class InquireIOLengthState;
+class ExternalMiscIoStatementState;
+class CloseStatementState;
+class NoopStatementState; // CLOSE or FLUSH on unknown unit
+class ErroneousIoStatementState;
+
+template <Direction, typename CHAR = char>
+class InternalFormattedIoStatementState;
+template <Direction> class InternalListIoStatementState;
+template <Direction, typename CHAR = char>
+class ExternalFormattedIoStatementState;
+template <Direction> class ExternalListIoStatementState;
+template <Direction> class ExternalUnformattedIoStatementState;
+template <Direction, typename CHAR = char> class ChildFormattedIoStatementState;
+template <Direction> class ChildListIoStatementState;
+template <Direction> class ChildUnformattedIoStatementState;
+
+struct InputStatementState {};
+struct OutputStatementState {};
+template <Direction D>
+using IoDirectionState = std::conditional_t<D == Direction::Input,
+ InputStatementState, OutputStatementState>;
+
+// Common state for all kinds of formatted I/O
+template <Direction D> class FormattedIoStatementState {};
+template <> class FormattedIoStatementState<Direction::Input> {
+public:
+ RT_API_ATTRS std::size_t GetEditDescriptorChars() const;
+ RT_API_ATTRS void GotChar(int);
+
+private:
+ // Account of characters read for edit descriptors (i.e., formatted I/O
+ // with a FORMAT, not list-directed or NAMELIST), not including padding.
+ std::size_t chars_{0}; // for READ(SIZE=)
+};
+
+// The Cookie type in the I/O API is a pointer (for C) to this class.
+class IoStatementState {
+public:
+ template <typename A> explicit RT_API_ATTRS IoStatementState(A &x) : u_{x} {}
+
+ // These member functions each project themselves into the active alternative.
+ // They're used by per-data-item routines in the I/O API (e.g., OutputReal64)
+ // to interact with the state of the I/O statement in progress.
+ // This design avoids virtual member functions and function pointers,
+ // which may not have good support in some runtime environments.
+
+ // CompleteOperation() is the last opportunity to raise an I/O error.
+ // It is called by EndIoStatement(), but it can be invoked earlier to
+ // catch errors for (e.g.) GetIoMsg() and GetNewUnit(). If called
+ // more than once, it is a no-op.
+ RT_API_ATTRS void CompleteOperation();
+ // Completes an I/O statement and reclaims storage.
+ RT_API_ATTRS int EndIoStatement();
+
+ RT_API_ATTRS bool Emit(
+ const char *, std::size_t bytes, std::size_t elementBytes = 0);
+ RT_API_ATTRS bool Receive(char *, std::size_t, std::size_t elementBytes = 0);
+ RT_API_ATTRS std::size_t GetNextInputBytes(const char *&);
+ RT_API_ATTRS std::size_t ViewBytesInRecord(const char *&, bool forward) const;
+ RT_API_ATTRS bool AdvanceRecord(int = 1);
+ RT_API_ATTRS void BackspaceRecord();
+ RT_API_ATTRS void HandleRelativePosition(std::int64_t byteOffset);
+ RT_API_ATTRS void HandleAbsolutePosition(
+ std::int64_t byteOffset); // for r* in list I/O
+ RT_API_ATTRS Fortran::common::optional<DataEdit> GetNextDataEdit(
+ int maxRepeat = 1);
+ RT_API_ATTRS ExternalFileUnit *
+ GetExternalFileUnit() const; // null if internal unit
+ RT_API_ATTRS bool BeginReadingRecord();
+ RT_API_ATTRS void FinishReadingRecord();
+ RT_API_ATTRS bool Inquire(InquiryKeywordHash, char *, std::size_t);
+ RT_API_ATTRS bool Inquire(InquiryKeywordHash, bool &);
+ RT_API_ATTRS bool Inquire(
+ InquiryKeywordHash, std::int64_t, bool &); // PENDING=
+ RT_API_ATTRS bool Inquire(InquiryKeywordHash, std::int64_t &);
+ RT_API_ATTRS std::int64_t InquirePos();
+ RT_API_ATTRS void GotChar(signed int = 1); // for READ(SIZE=); can be <0
+
+ RT_API_ATTRS MutableModes &mutableModes();
+ RT_API_ATTRS ConnectionState &GetConnectionState();
+ RT_API_ATTRS IoErrorHandler &GetIoErrorHandler() const;
+
+ // N.B.: this also works with base classes
+ template <typename A> RT_API_ATTRS A *get_if() const {
+ return common::visit(
+ [](auto &x) -> A * {
+ if constexpr (std::is_convertible_v<decltype(x.get()), A &>) {
+ return &x.get();
+ }
+ return nullptr;
+ },
+ u_);
+ }
+
+ // Vacant after the end of the current record
+ RT_API_ATTRS Fortran::common::optional<char32_t> GetCurrentCharSlow(
+ std::size_t &byteCount);
+
+ // For faster formatted input editing, this structure can be built by
+ // GetUpcomingFastAsciiField() and used to save significant time in
+ // GetCurrentChar, NextInField() and other input utilities when the input
+ // is buffered, does not require UTF-8 conversion, and comprises only
+ // single byte characters.
+ class FastAsciiField {
+ public:
+ RT_API_ATTRS FastAsciiField(ConnectionState &connection)
+ : connection_{connection} {}
+ RT_API_ATTRS FastAsciiField(
+ ConnectionState &connection, const char *start, std::size_t bytes)
+ : connection_{connection}, at_{start}, limit_{start + bytes} {
+ CheckForAsterisk();
+ }
+ RT_API_ATTRS ConnectionState &connection() { return connection_; }
+ RT_API_ATTRS std::size_t got() const { return got_; }
+
+ RT_API_ATTRS bool MustUseSlowPath() const { return at_ == nullptr; }
+
+ RT_API_ATTRS Fortran::common::optional<char32_t> Next() const {
+ if (at_ && at_ < limit_) {
+ return *at_;
+ } else {
+ return Fortran::common::nullopt;
+ }
+ }
+ RT_API_ATTRS void NextRecord(IoStatementState &io) {
+ if (at_) {
+ if (std::size_t bytes{io.GetNextInputBytes(at_)}) {
+ limit_ = at_ + bytes;
+ CheckForAsterisk();
+ } else {
+ at_ = limit_ = nullptr;
+ }
+ }
+ }
+ RT_API_ATTRS void Advance(int gotten, std::size_t bytes) {
+ if (at_ && at_ < limit_) {
+ ++at_;
+ got_ += gotten;
+ }
+ connection_.HandleRelativePosition(bytes);
+ }
+ RT_API_ATTRS bool MightHaveAsterisk() const { return !at_ || hasAsterisk_; }
+
+ private:
+ RT_API_ATTRS void CheckForAsterisk() {
+ hasAsterisk_ = at_ && at_ < limit_ &&
+ runtime::memchr(at_, '*', limit_ - at_) != nullptr;
+ }
+
+ ConnectionState &connection_;
+ const char *at_{nullptr};
+ const char *limit_{nullptr};
+ std::size_t got_{0}; // for READ(..., SIZE=)
+ bool hasAsterisk_{false};
+ };
+
+ RT_API_ATTRS FastAsciiField GetUpcomingFastAsciiField();
+
+ RT_API_ATTRS Fortran::common::optional<char32_t> GetCurrentChar(
+ std::size_t &byteCount, FastAsciiField *field = nullptr) {
+ if (field) {
+ if (auto ch{field->Next()}) {
+ byteCount = ch ? 1 : 0;
+ return ch;
+ } else if (!field->MustUseSlowPath()) {
+ return Fortran::common::nullopt;
+ }
+ }
+ return GetCurrentCharSlow(byteCount);
+ }
+
+ // The result of CueUpInput() and the "remaining" arguments to SkipSpaces()
+ // and NextInField() are always in units of bytes, not characters; the
+ // distinction matters for internal input from CHARACTER(KIND=2 and 4).
+
+ // For fixed-width fields, return the number of remaining bytes.
+ // Skip over leading blanks.
+ RT_API_ATTRS Fortran::common::optional<int> CueUpInput(
+ const DataEdit &edit, FastAsciiField *fastField = nullptr) {
+ Fortran::common::optional<int> remaining;
+ if (edit.IsListDirected()) {
+ std::size_t byteCount{0};
+ GetNextNonBlank(byteCount, fastField);
+ } else {
+ if (edit.width.value_or(0) > 0) {
+ remaining = *edit.width;
+ if (int bytesPerChar{GetConnectionState().internalIoCharKind};
+ bytesPerChar > 1) {
+ *remaining *= bytesPerChar;
+ }
+ }
+ SkipSpaces(remaining, fastField);
+ }
+ return remaining;
+ }
+
+ RT_API_ATTRS Fortran::common::optional<char32_t> SkipSpaces(
+ Fortran::common::optional<int> &remaining,
+ FastAsciiField *fastField = nullptr) {
+ while (!remaining || *remaining > 0) {
+ std::size_t byteCount{0};
+ if (auto ch{GetCurrentChar(byteCount, fastField)}) {
+ if (*ch != ' ' && *ch != '\t') {
+ return ch;
+ }
+ if (remaining) {
+ if (static_cast<std::size_t>(*remaining) < byteCount) {
+ break;
+ }
+ GotChar(byteCount);
+ *remaining -= byteCount;
+ }
+ if (fastField) {
+ fastField->Advance(0, byteCount);
+ } else {
+ HandleRelativePosition(byteCount);
+ }
+ } else {
+ break;
+ }
+ }
+ return Fortran::common::nullopt;
+ }
+
+ // Acquires the next input character, respecting any applicable field width
+ // or separator character.
+ RT_API_ATTRS Fortran::common::optional<char32_t> NextInField(
+ Fortran::common::optional<int> &remaining, const DataEdit &,
+ FastAsciiField *field = nullptr);
+
+ // Detect and signal any end-of-record condition after input.
+ // Returns true if at EOR and remaining input should be padded with blanks.
+ RT_API_ATTRS bool CheckForEndOfRecord(
+ std::size_t afterReading, const ConnectionState &);
+
+ // Skips spaces, advances records, and ignores NAMELIST comments
+ RT_API_ATTRS Fortran::common::optional<char32_t> GetNextNonBlank(
+ std::size_t &byteCount, FastAsciiField *fastField = nullptr) {
+ auto ch{GetCurrentChar(byteCount, fastField)};
+ bool inNamelist{mutableModes().inNamelist};
+ while (!ch || *ch == ' ' || *ch == '\t' || *ch == '\n' ||
+ (inNamelist && *ch == '!')) {
+ if (ch && (*ch == ' ' || *ch == '\t' || *ch == '\n')) {
+ if (fastField) {
+ fastField->Advance(0, byteCount);
+ } else {
+ HandleRelativePosition(byteCount);
+ }
+ } else if (AdvanceRecord()) {
+ if (fastField) {
+ fastField->NextRecord(*this);
+ }
+ } else {
+ return Fortran::common::nullopt;
+ }
+ ch = GetCurrentChar(byteCount, fastField);
+ }
+ return ch;
+ }
+
+ template <Direction D>
+ RT_API_ATTRS bool CheckFormattedStmtType(const char *name) {
+ if (get_if<FormattedIoStatementState<D>>()) {
+ return true;
+ } else {
+ auto &handler{GetIoErrorHandler()};
+ if (!handler.InError()) {
+ handler.Crash("%s called for I/O statement that is not formatted %s",
+ name, D == Direction::Output ? "output" : "input");
+ }
+ return false;
+ }
+ }
+
+private:
+ std::variant<Fortran::common::reference_wrapper<OpenStatementState>,
+ Fortran::common::reference_wrapper<CloseStatementState>,
+ Fortran::common::reference_wrapper<NoopStatementState>,
+ Fortran::common::reference_wrapper<
+ InternalFormattedIoStatementState<Direction::Output>>,
+ Fortran::common::reference_wrapper<
+ InternalFormattedIoStatementState<Direction::Input>>,
+ Fortran::common::reference_wrapper<
+ InternalListIoStatementState<Direction::Output>>,
+ Fortran::common::reference_wrapper<
+ InternalListIoStatementState<Direction::Input>>,
+ Fortran::common::reference_wrapper<
+ ExternalFormattedIoStatementState<Direction::Output>>,
+ Fortran::common::reference_wrapper<
+ ExternalFormattedIoStatementState<Direction::Input>>,
+ Fortran::common::reference_wrapper<
+ ExternalListIoStatementState<Direction::Output>>,
+ Fortran::common::reference_wrapper<
+ ExternalListIoStatementState<Direction::Input>>,
+ Fortran::common::reference_wrapper<
+ ExternalUnformattedIoStatementState<Direction::Output>>,
+ Fortran::common::reference_wrapper<
+ ExternalUnformattedIoStatementState<Direction::Input>>,
+ Fortran::common::reference_wrapper<
+ ChildFormattedIoStatementState<Direction::Output>>,
+ Fortran::common::reference_wrapper<
+ ChildFormattedIoStatementState<Direction::Input>>,
+ Fortran::common::reference_wrapper<
+ ChildListIoStatementState<Direction::Output>>,
+ Fortran::common::reference_wrapper<
+ ChildListIoStatementState<Direction::Input>>,
+ Fortran::common::reference_wrapper<
+ ChildUnformattedIoStatementState<Direction::Output>>,
+ Fortran::common::reference_wrapper<
+ ChildUnformattedIoStatementState<Direction::Input>>,
+ Fortran::common::reference_wrapper<InquireUnitState>,
+ Fortran::common::reference_wrapper<InquireNoUnitState>,
+ Fortran::common::reference_wrapper<InquireUnconnectedFileState>,
+ Fortran::common::reference_wrapper<InquireIOLengthState>,
+ Fortran::common::reference_wrapper<ExternalMiscIoStatementState>,
+ Fortran::common::reference_wrapper<ErroneousIoStatementState>>
+ u_;
+};
+
+// Base class for all per-I/O statement state classes.
+class IoStatementBase : public IoErrorHandler {
+public:
+ using IoErrorHandler::IoErrorHandler;
+
+ RT_API_ATTRS bool completedOperation() const { return completedOperation_; }
+
+ RT_API_ATTRS void CompleteOperation() { completedOperation_ = true; }
+ RT_API_ATTRS int EndIoStatement() { return GetIoStat(); }
+
+ // These are default no-op backstops that can be overridden by descendants.
+ RT_API_ATTRS bool Emit(
+ const char *, std::size_t bytes, std::size_t elementBytes = 0);
+ RT_API_ATTRS bool Receive(
+ char *, std::size_t bytes, std::size_t elementBytes = 0);
+ RT_API_ATTRS std::size_t GetNextInputBytes(const char *&);
+ RT_API_ATTRS std::size_t ViewBytesInRecord(const char *&, bool forward) const;
+ RT_API_ATTRS bool AdvanceRecord(int);
+ RT_API_ATTRS void BackspaceRecord();
+ RT_API_ATTRS void HandleRelativePosition(std::int64_t);
+ RT_API_ATTRS void HandleAbsolutePosition(std::int64_t);
+ RT_API_ATTRS Fortran::common::optional<DataEdit> GetNextDataEdit(
+ IoStatementState &, int maxRepeat = 1);
+ RT_API_ATTRS ExternalFileUnit *GetExternalFileUnit() const;
+ RT_API_ATTRS bool BeginReadingRecord();
+ RT_API_ATTRS void FinishReadingRecord();
+ RT_API_ATTRS bool Inquire(InquiryKeywordHash, char *, std::size_t);
+ RT_API_ATTRS bool Inquire(InquiryKeywordHash, bool &);
+ RT_API_ATTRS bool Inquire(InquiryKeywordHash, std::int64_t, bool &);
+ RT_API_ATTRS bool Inquire(InquiryKeywordHash, std::int64_t &);
+ RT_API_ATTRS std::int64_t InquirePos();
+
+ RT_API_ATTRS void BadInquiryKeywordHashCrash(InquiryKeywordHash);
+
+ RT_API_ATTRS void ReportUnsupportedChildIo() const {
+ Crash("not yet implemented: child IO");
+ }
+
+protected:
+ bool completedOperation_{false};
+};
+
+// Common state for list-directed & NAMELIST I/O, both internal & external
+template <Direction> class ListDirectedStatementState;
+template <>
+class ListDirectedStatementState<Direction::Output>
+ : public FormattedIoStatementState<Direction::Output> {
+public:
+ RT_API_ATTRS bool EmitLeadingSpaceOrAdvance(
+ IoStatementState &, std::size_t = 1, bool isCharacter = false);
+ RT_API_ATTRS Fortran::common::optional<DataEdit> GetNextDataEdit(
+ IoStatementState &, int maxRepeat = 1);
+ RT_API_ATTRS bool lastWasUndelimitedCharacter() const {
+ return lastWasUndelimitedCharacter_;
+ }
+ RT_API_ATTRS void set_lastWasUndelimitedCharacter(bool yes = true) {
+ lastWasUndelimitedCharacter_ = yes;
+ }
+
+private:
+ bool lastWasUndelimitedCharacter_{false};
+};
+template <>
+class ListDirectedStatementState<Direction::Input>
+ : public FormattedIoStatementState<Direction::Input> {
+public:
+ RT_API_ATTRS bool inNamelistSequence() const { return inNamelistSequence_; }
+ RT_API_ATTRS int EndIoStatement();
+
+ // Skips value separators, handles repetition and null values.
+ // Vacant when '/' appears; present with descriptor == ListDirectedNullValue
+ // when a null value appears.
+ RT_API_ATTRS Fortran::common::optional<DataEdit> GetNextDataEdit(
+ IoStatementState &, int maxRepeat = 1);
+
+ // Each NAMELIST input item is treated like a distinct list-directed
+ // input statement. This member function resets some state so that
+ // repetition and null values work correctly for each successive
+ // NAMELIST input item.
+ RT_API_ATTRS void ResetForNextNamelistItem(bool inNamelistSequence) {
+ remaining_ = 0;
+ if (repeatPosition_) {
+ repeatPosition_->Cancel();
+ }
+ eatComma_ = false;
+ realPart_ = imaginaryPart_ = false;
+ inNamelistSequence_ = inNamelistSequence;
+ }
+
+private:
+ int remaining_{0}; // for "r*" repetition
+ Fortran::common::optional<SavedPosition> repeatPosition_;
+ bool eatComma_{false}; // consume comma after previously read item
+ bool hitSlash_{false}; // once '/' is seen, nullify further items
+ bool realPart_{false};
+ bool imaginaryPart_{false};
+ bool inNamelistSequence_{false};
+};
+
+template <Direction DIR>
+class InternalIoStatementState : public IoStatementBase,
+ public IoDirectionState<DIR> {
+public:
+ using Buffer =
+ std::conditional_t<DIR == Direction::Input, const char *, char *>;
+ RT_API_ATTRS InternalIoStatementState(Buffer, std::size_t,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+ RT_API_ATTRS InternalIoStatementState(
+ const Descriptor &, const char *sourceFile = nullptr, int sourceLine = 0);
+ RT_API_ATTRS int EndIoStatement();
+
+ RT_API_ATTRS bool Emit(
+ const char *data, std::size_t bytes, std::size_t elementBytes = 0);
+ RT_API_ATTRS std::size_t GetNextInputBytes(const char *&);
+ RT_API_ATTRS bool AdvanceRecord(int = 1);
+ RT_API_ATTRS void BackspaceRecord();
+ RT_API_ATTRS ConnectionState &GetConnectionState() { return unit_; }
+ RT_API_ATTRS MutableModes &mutableModes() { return unit_.modes; }
+ RT_API_ATTRS void HandleRelativePosition(std::int64_t);
+ RT_API_ATTRS void HandleAbsolutePosition(std::int64_t);
+ RT_API_ATTRS std::int64_t InquirePos();
+
+protected:
+ bool free_{true};
+ InternalDescriptorUnit<DIR> unit_;
+};
+
+template <Direction DIR, typename CHAR>
+class InternalFormattedIoStatementState
+ : public InternalIoStatementState<DIR>,
+ public FormattedIoStatementState<DIR> {
+public:
+ using CharType = CHAR;
+ using typename InternalIoStatementState<DIR>::Buffer;
+ RT_API_ATTRS InternalFormattedIoStatementState(Buffer internal,
+ std::size_t internalLength, const CharType *format,
+ std::size_t formatLength, const Descriptor *formatDescriptor = nullptr,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+ RT_API_ATTRS InternalFormattedIoStatementState(const Descriptor &,
+ const CharType *format, std::size_t formatLength,
+ const Descriptor *formatDescriptor = nullptr,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+ RT_API_ATTRS IoStatementState &ioStatementState() {
+ return ioStatementState_;
+ }
+ RT_API_ATTRS void CompleteOperation();
+ RT_API_ATTRS int EndIoStatement();
+ RT_API_ATTRS Fortran::common::optional<DataEdit> GetNextDataEdit(
+ IoStatementState &, int maxRepeat = 1) {
+ return format_.GetNextDataEdit(*this, maxRepeat);
+ }
+
+private:
+ IoStatementState ioStatementState_; // points to *this
+ using InternalIoStatementState<DIR>::unit_;
+ // format_ *must* be last; it may be partial someday
+ FormatControl<InternalFormattedIoStatementState> format_;
+};
+
+template <Direction DIR>
+class InternalListIoStatementState : public InternalIoStatementState<DIR>,
+ public ListDirectedStatementState<DIR> {
+public:
+ using typename InternalIoStatementState<DIR>::Buffer;
+ RT_API_ATTRS InternalListIoStatementState(Buffer internal,
+ std::size_t internalLength, const char *sourceFile = nullptr,
+ int sourceLine = 0);
+ RT_API_ATTRS InternalListIoStatementState(
+ const Descriptor &, const char *sourceFile = nullptr, int sourceLine = 0);
+ RT_API_ATTRS IoStatementState &ioStatementState() {
+ return ioStatementState_;
+ }
+ using ListDirectedStatementState<DIR>::GetNextDataEdit;
+ RT_API_ATTRS void CompleteOperation();
+ RT_API_ATTRS int EndIoStatement();
+
+private:
+ IoStatementState ioStatementState_; // points to *this
+ using InternalIoStatementState<DIR>::unit_;
+};
+
+class ExternalIoStatementBase : public IoStatementBase {
+public:
+ RT_API_ATTRS ExternalIoStatementBase(
+ ExternalFileUnit &, const char *sourceFile = nullptr, int sourceLine = 0);
+ RT_API_ATTRS ExternalFileUnit &unit() { return unit_; }
+ RT_API_ATTRS const ExternalFileUnit &unit() const { return unit_; }
+ RT_API_ATTRS MutableModes &mutableModes();
+ RT_API_ATTRS ConnectionState &GetConnectionState();
+ RT_API_ATTRS int asynchronousID() const { return asynchronousID_; }
+ RT_API_ATTRS void set_destroy(bool yes = true) { destroy_ = yes; }
+ RT_API_ATTRS int EndIoStatement();
+ RT_API_ATTRS ExternalFileUnit *GetExternalFileUnit() const { return &unit_; }
+ RT_API_ATTRS void SetAsynchronous();
+ RT_API_ATTRS std::int64_t InquirePos();
+
+private:
+ ExternalFileUnit &unit_;
+ int asynchronousID_{-1};
+ bool destroy_{false};
+};
+
+template <Direction DIR>
+class ExternalIoStatementState : public ExternalIoStatementBase,
+ public IoDirectionState<DIR> {
+public:
+ RT_API_ATTRS ExternalIoStatementState(
+ ExternalFileUnit &, const char *sourceFile = nullptr, int sourceLine = 0);
+ RT_API_ATTRS MutableModes &mutableModes() { return mutableModes_; }
+ RT_API_ATTRS void CompleteOperation();
+ RT_API_ATTRS int EndIoStatement();
+ RT_API_ATTRS bool Emit(
+ const char *, std::size_t bytes, std::size_t elementBytes = 0);
+ RT_API_ATTRS std::size_t GetNextInputBytes(const char *&);
+ RT_API_ATTRS std::size_t ViewBytesInRecord(const char *&, bool forward) const;
+ RT_API_ATTRS bool AdvanceRecord(int = 1);
+ RT_API_ATTRS void BackspaceRecord();
+ RT_API_ATTRS void HandleRelativePosition(std::int64_t);
+ RT_API_ATTRS void HandleAbsolutePosition(std::int64_t);
+ RT_API_ATTRS bool BeginReadingRecord();
+ RT_API_ATTRS void FinishReadingRecord();
+
+private:
+ // These are forked from ConnectionState's modes at the beginning
+ // of each formatted I/O statement so they may be overridden by control
+ // edit descriptors during the statement.
+ MutableModes mutableModes_;
+};
+
+template <Direction DIR, typename CHAR>
+class ExternalFormattedIoStatementState
+ : public ExternalIoStatementState<DIR>,
+ public FormattedIoStatementState<DIR> {
+public:
+ using CharType = CHAR;
+ RT_API_ATTRS ExternalFormattedIoStatementState(ExternalFileUnit &,
+ const CharType *format, std::size_t formatLength,
+ const Descriptor *formatDescriptor = nullptr,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+ RT_API_ATTRS void CompleteOperation();
+ RT_API_ATTRS int EndIoStatement();
+ RT_API_ATTRS Fortran::common::optional<DataEdit> GetNextDataEdit(
+ IoStatementState &, int maxRepeat = 1) {
+ return format_.GetNextDataEdit(*this, maxRepeat);
+ }
+
+private:
+ FormatControl<ExternalFormattedIoStatementState> format_;
+};
+
+template <Direction DIR>
+class ExternalListIoStatementState : public ExternalIoStatementState<DIR>,
+ public ListDirectedStatementState<DIR> {
+public:
+ using ExternalIoStatementState<DIR>::ExternalIoStatementState;
+ using ListDirectedStatementState<DIR>::GetNextDataEdit;
+ RT_API_ATTRS int EndIoStatement();
+};
+
+template <Direction DIR>
+class ExternalUnformattedIoStatementState
+ : public ExternalIoStatementState<DIR> {
+public:
+ using ExternalIoStatementState<DIR>::ExternalIoStatementState;
+ RT_API_ATTRS bool Receive(char *, std::size_t, std::size_t elementBytes = 0);
+};
+
+template <Direction DIR>
+class ChildIoStatementState : public IoStatementBase,
+ public IoDirectionState<DIR> {
+public:
+ RT_API_ATTRS ChildIoStatementState(
+ ChildIo &, const char *sourceFile = nullptr, int sourceLine = 0);
+ RT_API_ATTRS ChildIo &child() { return child_; }
+ RT_API_ATTRS MutableModes &mutableModes();
+ RT_API_ATTRS ConnectionState &GetConnectionState();
+ RT_API_ATTRS ExternalFileUnit *GetExternalFileUnit() const;
+ RT_API_ATTRS int EndIoStatement();
+ RT_API_ATTRS bool Emit(
+ const char *, std::size_t bytes, std::size_t elementBytes = 0);
+ RT_API_ATTRS std::size_t GetNextInputBytes(const char *&);
+ RT_API_ATTRS std::size_t ViewBytesInRecord(const char *&, bool forward) const;
+ RT_API_ATTRS void HandleRelativePosition(std::int64_t);
+ RT_API_ATTRS void HandleAbsolutePosition(std::int64_t);
+
+private:
+ ChildIo &child_;
+};
+
+template <Direction DIR, typename CHAR>
+class ChildFormattedIoStatementState : public ChildIoStatementState<DIR>,
+ public FormattedIoStatementState<DIR> {
+public:
+ using CharType = CHAR;
+ RT_API_ATTRS ChildFormattedIoStatementState(ChildIo &, const CharType *format,
+ std::size_t formatLength, const Descriptor *formatDescriptor = nullptr,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+ RT_API_ATTRS MutableModes &mutableModes() { return mutableModes_; }
+ RT_API_ATTRS void CompleteOperation();
+ RT_API_ATTRS int EndIoStatement();
+ RT_API_ATTRS bool AdvanceRecord(int = 1);
+ RT_API_ATTRS Fortran::common::optional<DataEdit> GetNextDataEdit(
+ IoStatementState &, int maxRepeat = 1) {
+ return format_.GetNextDataEdit(*this, maxRepeat);
+ }
+
+private:
+ MutableModes mutableModes_;
+ FormatControl<ChildFormattedIoStatementState> format_;
+};
+
+template <Direction DIR>
+class ChildListIoStatementState : public ChildIoStatementState<DIR>,
+ public ListDirectedStatementState<DIR> {
+public:
+ using ChildIoStatementState<DIR>::ChildIoStatementState;
+ using ListDirectedStatementState<DIR>::GetNextDataEdit;
+ RT_API_ATTRS int EndIoStatement();
+};
+
+template <Direction DIR>
+class ChildUnformattedIoStatementState : public ChildIoStatementState<DIR> {
+public:
+ using ChildIoStatementState<DIR>::ChildIoStatementState;
+ RT_API_ATTRS bool Receive(char *, std::size_t, std::size_t elementBytes = 0);
+};
+
+// OPEN
+class OpenStatementState : public ExternalIoStatementBase {
+public:
+ RT_API_ATTRS OpenStatementState(ExternalFileUnit &unit, bool wasExtant,
+ bool isNewUnit, const char *sourceFile = nullptr, int sourceLine = 0)
+ : ExternalIoStatementBase{unit, sourceFile, sourceLine},
+ wasExtant_{wasExtant}, isNewUnit_{isNewUnit} {}
+ RT_API_ATTRS bool wasExtant() const { return wasExtant_; }
+ RT_API_ATTRS void set_status(OpenStatus status) {
+ status_ = status;
+ } // STATUS=
+ RT_API_ATTRS void set_path(const char *, std::size_t); // FILE=
+ RT_API_ATTRS void set_position(Position position) {
+ position_ = position;
+ } // POSITION=
+ RT_API_ATTRS void set_action(Action action) { action_ = action; } // ACTION=
+ RT_API_ATTRS void set_convert(Convert convert) {
+ convert_ = convert;
+ } // CONVERT=
+ RT_API_ATTRS void set_access(Access access) { access_ = access; } // ACCESS=
+ RT_API_ATTRS void set_isUnformatted(bool yes = true) {
+ isUnformatted_ = yes;
+ } // FORM=
+
+ RT_API_ATTRS void CompleteOperation();
+ RT_API_ATTRS int EndIoStatement();
+
+private:
+ bool wasExtant_;
+ bool isNewUnit_;
+ Fortran::common::optional<OpenStatus> status_;
+ Fortran::common::optional<Position> position_;
+ Fortran::common::optional<Action> action_;
+ Convert convert_{Convert::Unknown};
+ OwningPtr<char> path_;
+ std::size_t pathLength_{};
+ Fortran::common::optional<bool> isUnformatted_;
+ Fortran::common::optional<Access> access_;
+};
+
+class CloseStatementState : public ExternalIoStatementBase {
+public:
+ RT_API_ATTRS CloseStatementState(ExternalFileUnit &unit,
+ const char *sourceFile = nullptr, int sourceLine = 0)
+ : ExternalIoStatementBase{unit, sourceFile, sourceLine} {}
+ RT_API_ATTRS void set_status(CloseStatus status) { status_ = status; }
+ RT_API_ATTRS int EndIoStatement();
+
+private:
+ CloseStatus status_{CloseStatus::Keep};
+};
+
+// For CLOSE(bad unit), WAIT(bad unit, ID=nonzero), INQUIRE(unconnected unit),
+// and recoverable BACKSPACE(bad unit)
+class NoUnitIoStatementState : public IoStatementBase {
+public:
+ RT_API_ATTRS IoStatementState &ioStatementState() {
+ return ioStatementState_;
+ }
+ RT_API_ATTRS MutableModes &mutableModes() { return connection_.modes; }
+ RT_API_ATTRS ConnectionState &GetConnectionState() { return connection_; }
+ RT_API_ATTRS int badUnitNumber() const { return badUnitNumber_; }
+ RT_API_ATTRS void CompleteOperation();
+ RT_API_ATTRS int EndIoStatement();
+
+protected:
+ template <typename A>
+ RT_API_ATTRS NoUnitIoStatementState(A &stmt, const char *sourceFile = nullptr,
+ int sourceLine = 0, int badUnitNumber = -1)
+ : IoStatementBase{sourceFile, sourceLine}, ioStatementState_{stmt},
+ badUnitNumber_{badUnitNumber} {}
+
+private:
+ IoStatementState ioStatementState_; // points to *this
+ ConnectionState connection_;
+ int badUnitNumber_;
+};
+
+class NoopStatementState : public NoUnitIoStatementState {
+public:
+ RT_API_ATTRS NoopStatementState(
+ const char *sourceFile = nullptr, int sourceLine = 0, int unitNumber = -1)
+ : NoUnitIoStatementState{*this, sourceFile, sourceLine, unitNumber} {}
+ RT_API_ATTRS void set_status(CloseStatus) {} // discards
+};
+
+extern template class InternalIoStatementState<Direction::Output>;
+extern template class InternalIoStatementState<Direction::Input>;
+extern template class InternalFormattedIoStatementState<Direction::Output>;
+extern template class InternalFormattedIoStatementState<Direction::Input>;
+extern template class InternalListIoStatementState<Direction::Output>;
+extern template class InternalListIoStatementState<Direction::Input>;
+extern template class ExternalIoStatementState<Direction::Output>;
+extern template class ExternalIoStatementState<Direction::Input>;
+extern template class ExternalFormattedIoStatementState<Direction::Output>;
+extern template class ExternalFormattedIoStatementState<Direction::Input>;
+extern template class ExternalListIoStatementState<Direction::Output>;
+extern template class ExternalListIoStatementState<Direction::Input>;
+extern template class ExternalUnformattedIoStatementState<Direction::Output>;
+extern template class ExternalUnformattedIoStatementState<Direction::Input>;
+extern template class ChildIoStatementState<Direction::Output>;
+extern template class ChildIoStatementState<Direction::Input>;
+extern template class ChildFormattedIoStatementState<Direction::Output>;
+extern template class ChildFormattedIoStatementState<Direction::Input>;
+extern template class ChildListIoStatementState<Direction::Output>;
+extern template class ChildListIoStatementState<Direction::Input>;
+extern template class ChildUnformattedIoStatementState<Direction::Output>;
+extern template class ChildUnformattedIoStatementState<Direction::Input>;
+
+extern template class FormatControl<
+ InternalFormattedIoStatementState<Direction::Output>>;
+extern template class FormatControl<
+ InternalFormattedIoStatementState<Direction::Input>>;
+extern template class FormatControl<
+ ExternalFormattedIoStatementState<Direction::Output>>;
+extern template class FormatControl<
+ ExternalFormattedIoStatementState<Direction::Input>>;
+extern template class FormatControl<
+ ChildFormattedIoStatementState<Direction::Output>>;
+extern template class FormatControl<
+ ChildFormattedIoStatementState<Direction::Input>>;
+
+class InquireUnitState : public ExternalIoStatementBase {
+public:
+ RT_API_ATTRS InquireUnitState(ExternalFileUnit &unit,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+ RT_API_ATTRS bool Inquire(InquiryKeywordHash, char *, std::size_t);
+ RT_API_ATTRS bool Inquire(InquiryKeywordHash, bool &);
+ RT_API_ATTRS bool Inquire(InquiryKeywordHash, std::int64_t, bool &);
+ RT_API_ATTRS bool Inquire(InquiryKeywordHash, std::int64_t &);
+};
+
+class InquireNoUnitState : public NoUnitIoStatementState {
+public:
+ RT_API_ATTRS InquireNoUnitState(const char *sourceFile = nullptr,
+ int sourceLine = 0, int badUnitNumber = -1);
+ RT_API_ATTRS bool Inquire(InquiryKeywordHash, char *, std::size_t);
+ RT_API_ATTRS bool Inquire(InquiryKeywordHash, bool &);
+ RT_API_ATTRS bool Inquire(InquiryKeywordHash, std::int64_t, bool &);
+ RT_API_ATTRS bool Inquire(InquiryKeywordHash, std::int64_t &);
+};
+
+class InquireUnconnectedFileState : public NoUnitIoStatementState {
+public:
+ RT_API_ATTRS InquireUnconnectedFileState(OwningPtr<char> &&path,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+ RT_API_ATTRS bool Inquire(InquiryKeywordHash, char *, std::size_t);
+ RT_API_ATTRS bool Inquire(InquiryKeywordHash, bool &);
+ RT_API_ATTRS bool Inquire(InquiryKeywordHash, std::int64_t, bool &);
+ RT_API_ATTRS bool Inquire(InquiryKeywordHash, std::int64_t &);
+
+private:
+ OwningPtr<char> path_; // trimmed and NUL terminated
+};
+
+class InquireIOLengthState : public NoUnitIoStatementState,
+ public OutputStatementState {
+public:
+ RT_API_ATTRS InquireIOLengthState(
+ const char *sourceFile = nullptr, int sourceLine = 0);
+ RT_API_ATTRS std::size_t bytes() const { return bytes_; }
+ RT_API_ATTRS bool Emit(
+ const char *, std::size_t bytes, std::size_t elementBytes = 0);
+
+private:
+ std::size_t bytes_{0};
+};
+
+class ExternalMiscIoStatementState : public ExternalIoStatementBase {
+public:
+ enum Which { Flush, Backspace, Endfile, Rewind, Wait };
+ RT_API_ATTRS ExternalMiscIoStatementState(ExternalFileUnit &unit, Which which,
+ const char *sourceFile = nullptr, int sourceLine = 0)
+ : ExternalIoStatementBase{unit, sourceFile, sourceLine}, which_{which} {}
+ RT_API_ATTRS void CompleteOperation();
+ RT_API_ATTRS int EndIoStatement();
+
+private:
+ Which which_;
+};
+
+class ErroneousIoStatementState : public IoStatementBase {
+public:
+ explicit RT_API_ATTRS ErroneousIoStatementState(Iostat iostat,
+ ExternalFileUnit *unit = nullptr, const char *sourceFile = nullptr,
+ int sourceLine = 0)
+ : IoStatementBase{sourceFile, sourceLine}, unit_{unit} {
+ SetPendingError(iostat);
+ }
+ RT_API_ATTRS int EndIoStatement();
+ RT_API_ATTRS ConnectionState &GetConnectionState() { return connection_; }
+ RT_API_ATTRS MutableModes &mutableModes() { return connection_.modes; }
+
+private:
+ ConnectionState connection_;
+ ExternalFileUnit *unit_{nullptr};
+};
+
+RT_OFFLOAD_API_GROUP_END
+
+} // namespace Fortran::runtime::io
+#endif // FLANG_RT_RUNTIME_IO_STMT_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/lock.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/lock.h
new file mode 100644
index 00000000000..7c885342457
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/lock.h
@@ -0,0 +1,116 @@
+//===-- include/flang-rt/runtime/lock.h -------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Wraps a mutex
+
+#ifndef FLANG_RT_RUNTIME_LOCK_H_
+#define FLANG_RT_RUNTIME_LOCK_H_
+
+#include "terminator.h"
+#include "tools.h"
+
+// Avoid <mutex> if possible to avoid introduction of C++ runtime
+// library dependence.
+#ifndef _WIN32
+#define USE_PTHREADS 1
+#else
+#undef USE_PTHREADS
+#endif
+
+#if USE_PTHREADS
+#include <pthread.h>
+#elif defined(_WIN32)
+#include "flang/Common/windows-include.h"
+#else
+#include <mutex>
+#endif
+
+namespace Fortran::runtime {
+
+class Lock {
+public:
+#if RT_USE_PSEUDO_LOCK
+ // No lock implementation, e.g. for using together
+ // with RT_USE_PSEUDO_FILE_UNIT.
+ // The users of Lock class may use it under
+ // USE_PTHREADS and otherwise, so it has to provide
+ // all the interfaces.
+ RT_API_ATTRS void Take() {}
+ RT_API_ATTRS bool Try() { return true; }
+ RT_API_ATTRS void Drop() {}
+ RT_API_ATTRS bool TakeIfNoDeadlock() { return true; }
+#elif USE_PTHREADS
+ Lock() { pthread_mutex_init(&mutex_, nullptr); }
+ ~Lock() { pthread_mutex_destroy(&mutex_); }
+ void Take() {
+ while (pthread_mutex_lock(&mutex_)) {
+ }
+ holder_ = pthread_self();
+ isBusy_ = true;
+ }
+ bool TakeIfNoDeadlock() {
+ if (isBusy_) {
+ auto thisThread{pthread_self()};
+ if (pthread_equal(thisThread, holder_)) {
+ return false;
+ }
+ }
+ Take();
+ return true;
+ }
+ bool Try() { return pthread_mutex_trylock(&mutex_) == 0; }
+ void Drop() {
+ isBusy_ = false;
+ pthread_mutex_unlock(&mutex_);
+ }
+#elif defined(_WIN32)
+ Lock() { InitializeCriticalSection(&cs_); }
+ ~Lock() { DeleteCriticalSection(&cs_); }
+ void Take() { EnterCriticalSection(&cs_); }
+ bool Try() { return TryEnterCriticalSection(&cs_); }
+ void Drop() { LeaveCriticalSection(&cs_); }
+#else
+ void Take() { mutex_.lock(); }
+ bool Try() { return mutex_.try_lock(); }
+ void Drop() { mutex_.unlock(); }
+#endif
+
+ void CheckLocked(const Terminator &terminator) {
+ if (Try()) {
+ Drop();
+ terminator.Crash("Lock::CheckLocked() failed");
+ }
+ }
+
+private:
+#if RT_USE_PSEUDO_FILE_UNIT
+ // No state.
+#elif USE_PTHREADS
+ pthread_mutex_t mutex_{};
+ volatile bool isBusy_{false};
+ volatile pthread_t holder_;
+#elif defined(_WIN32)
+ CRITICAL_SECTION cs_;
+#else
+ std::mutex mutex_;
+#endif
+};
+
+class CriticalSection {
+public:
+ explicit RT_API_ATTRS CriticalSection(Lock &lock) : lock_{lock} {
+ lock_.Take();
+ }
+ RT_API_ATTRS ~CriticalSection() { lock_.Drop(); }
+
+private:
+ Lock &lock_;
+};
+} // namespace Fortran::runtime
+
+#endif // FLANG_RT_RUNTIME_LOCK_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/memory.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/memory.h
new file mode 100644
index 00000000000..93b477afa98
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/memory.h
@@ -0,0 +1,173 @@
+//===-- include/flang-rt/runtime/memory.h -----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Thin wrapper around malloc()/free() to isolate the dependency,
+// ease porting, and provide an owning pointer.
+
+#ifndef FLANG_RT_RUNTIME_MEMORY_H_
+#define FLANG_RT_RUNTIME_MEMORY_H_
+
+#include "flang/Common/api-attrs.h"
+#include <cassert>
+#include <memory>
+#include <type_traits>
+
+namespace Fortran::runtime {
+
+class Terminator;
+
+[[nodiscard]] RT_API_ATTRS void *AllocateMemoryOrCrash(
+ const Terminator &, std::size_t bytes);
+template <typename A>
+[[nodiscard]] RT_API_ATTRS A &AllocateOrCrash(const Terminator &t) {
+ return *reinterpret_cast<A *>(AllocateMemoryOrCrash(t, sizeof(A)));
+}
+RT_API_ATTRS void *ReallocateMemoryOrCrash(
+ const Terminator &, void *ptr, std::size_t newByteSize);
+RT_API_ATTRS void FreeMemory(void *);
+template <typename A> RT_API_ATTRS void FreeMemory(A *p) {
+ FreeMemory(reinterpret_cast<void *>(p));
+}
+template <typename A> RT_API_ATTRS void FreeMemoryAndNullify(A *&p) {
+ FreeMemory(p);
+ p = nullptr;
+}
+
+// Very basic implementation mimicking std::unique_ptr.
+// It should work for any offload device compiler.
+// It uses a fixed memory deleter based on FreeMemory(),
+// and does not support array objects with runtime length.
+template <typename A> class OwningPtr {
+public:
+ using pointer_type = A *;
+
+ OwningPtr() = default;
+ RT_API_ATTRS explicit OwningPtr(pointer_type p) : ptr_(p) {}
+ RT_API_ATTRS OwningPtr(const OwningPtr &) = delete;
+ RT_API_ATTRS OwningPtr &operator=(const OwningPtr &) = delete;
+ RT_API_ATTRS OwningPtr(OwningPtr &&other) {
+ ptr_ = other.ptr_;
+ other.ptr_ = pointer_type{};
+ }
+ RT_API_ATTRS OwningPtr &operator=(OwningPtr &&other) {
+ if (this != &other) {
+ delete_ptr(ptr_);
+ ptr_ = other.ptr_;
+ other.ptr_ = pointer_type{};
+ }
+ return *this;
+ }
+ constexpr RT_API_ATTRS OwningPtr(std::nullptr_t) : OwningPtr() {}
+
+ // Delete the pointer, if owns one.
+ RT_API_ATTRS ~OwningPtr() {
+ if (ptr_ != pointer_type{}) {
+ delete_ptr(ptr_);
+ ptr_ = pointer_type{};
+ }
+ }
+
+ // Release the ownership.
+ RT_API_ATTRS pointer_type release() {
+ pointer_type p = ptr_;
+ ptr_ = pointer_type{};
+ return p;
+ }
+
+ RT_DIAG_PUSH
+ RT_DIAG_DISABLE_CALL_HOST_FROM_DEVICE_WARN
+ // Replace the pointer.
+ RT_API_ATTRS void reset(pointer_type p = pointer_type{}) {
+ std::swap(ptr_, p);
+ if (p != pointer_type{}) {
+ // Delete the owned pointer.
+ delete_ptr(p);
+ }
+ }
+
+ // Exchange the pointer with another object.
+ RT_API_ATTRS void swap(OwningPtr &other) { std::swap(ptr_, other.ptr_); }
+ RT_DIAG_POP
+
+ // Get the stored pointer.
+ RT_API_ATTRS pointer_type get() const { return ptr_; }
+
+ RT_API_ATTRS explicit operator bool() const {
+ return get() != pointer_type{};
+ }
+
+ RT_API_ATTRS typename std::add_lvalue_reference<A>::type operator*() const {
+ assert(get() != pointer_type{});
+ return *get();
+ }
+
+ RT_API_ATTRS pointer_type operator->() const { return get(); }
+
+private:
+ RT_API_ATTRS void delete_ptr(pointer_type p) { FreeMemory(p); }
+ pointer_type ptr_{};
+};
+
+template <typename X, typename Y>
+inline RT_API_ATTRS bool operator!=(
+ const OwningPtr<X> &x, const OwningPtr<Y> &y) {
+ return x.get() != y.get();
+}
+
+template <typename X>
+inline RT_API_ATTRS bool operator!=(const OwningPtr<X> &x, std::nullptr_t) {
+ return (bool)x;
+}
+
+template <typename X>
+inline RT_API_ATTRS bool operator!=(std::nullptr_t, const OwningPtr<X> &x) {
+ return (bool)x;
+}
+
+template <typename A> class SizedNew {
+public:
+ explicit RT_API_ATTRS SizedNew(const Terminator &terminator)
+ : terminator_{terminator} {}
+
+ template <typename... X>
+ [[nodiscard]] RT_API_ATTRS OwningPtr<A> operator()(
+ std::size_t bytes, X &&...x) {
+ return OwningPtr<A>{new (AllocateMemoryOrCrash(terminator_, bytes))
+ A{std::forward<X>(x)...}};
+ }
+
+private:
+ const Terminator &terminator_;
+};
+
+template <typename A> struct New : public SizedNew<A> {
+ using SizedNew<A>::SizedNew;
+ template <typename... X>
+ [[nodiscard]] RT_API_ATTRS OwningPtr<A> operator()(X &&...x) {
+ return SizedNew<A>::operator()(sizeof(A), std::forward<X>(x)...);
+ }
+};
+
+template <typename A> struct Allocator {
+ using value_type = A;
+ explicit Allocator(const Terminator &t) : terminator{t} {}
+ template <typename B>
+ explicit constexpr Allocator(const Allocator<B> &that) noexcept
+ : terminator{that.terminator} {}
+ Allocator(const Allocator &) = default;
+ Allocator(Allocator &&) = default;
+ [[nodiscard]] constexpr A *allocate(std::size_t n) {
+ return reinterpret_cast<A *>(
+ AllocateMemoryOrCrash(terminator, n * sizeof(A)));
+ }
+ constexpr void deallocate(A *p, std::size_t) { FreeMemory(p); }
+ const Terminator &terminator;
+};
+} // namespace Fortran::runtime
+
+#endif // FLANG_RT_RUNTIME_MEMORY_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/namelist.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/namelist.h
new file mode 100644
index 00000000000..17d7bf310cc
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/namelist.h
@@ -0,0 +1,54 @@
+//===-- include/flang-rt/runtime/namelist.h ---------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Defines the data structure used for NAMELIST I/O
+
+#ifndef FLANG_RT_RUNTIME_NAMELIST_H_
+#define FLANG_RT_RUNTIME_NAMELIST_H_
+
+#include "non-tbp-dio.h"
+#include "flang/Common/api-attrs.h"
+
+#include <cstddef>
+
+namespace Fortran::runtime {
+class Descriptor;
+class IoStatementState;
+} // namespace Fortran::runtime
+
+namespace Fortran::runtime::io {
+
+// A NAMELIST group is a named ordered collection of distinct variable names.
+// It is packaged by lowering into an instance of this class.
+// If all the items are variables with fixed addresses, the NAMELIST group
+// description can be in a read-only section.
+class NamelistGroup {
+public:
+ struct Item {
+ const char *name; // NUL-terminated lower-case
+ const Descriptor &descriptor;
+ };
+ const char *groupName{nullptr}; // NUL-terminated lower-case
+ std::size_t items{0};
+ const Item *item{nullptr}; // in original declaration order
+
+ // When the uses of a namelist group appear in scopes with distinct sets
+ // of non-type-bound defined formatted I/O interfaces, they require the
+ // use of distinct NamelistGroups pointing to distinct NonTbpDefinedIoTables.
+ // Multiple NamelistGroup instances may share a NonTbpDefinedIoTable..
+ const NonTbpDefinedIoTable *nonTbpDefinedIo{nullptr};
+};
+
+// Look ahead on input for a '/' or an identifier followed by a '=', '(', or '%'
+// character; for use in disambiguating a name-like value (e.g. F or T) from a
+// NAMELIST group item name and for coping with short arrays. Always false
+// when not reading a NAMELIST.
+RT_API_ATTRS bool IsNamelistNameOrSlash(IoStatementState &);
+
+} // namespace Fortran::runtime::io
+#endif // FLANG_RT_RUNTIME_NAMELIST_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/non-tbp-dio.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/non-tbp-dio.h
new file mode 100644
index 00000000000..99d4113b6c7
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/non-tbp-dio.h
@@ -0,0 +1,60 @@
+//===-- include/flang-rt/runtime/non-tbp-dio.h ------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Defines a structure used to identify the non-type-bound defined I/O
+// generic interfaces that are accessible in a particular scope. This
+// table is used by some I/O APIs and is also part of the NAMELIST
+// group table.
+//
+// A specific procedure for a particular derived type must appear in
+// this table if it (a) is a dummy procedure or procedure pointer,
+// (b) is part of the defined I/O generic definition in a scope other
+// than the one that contains the derived type definition, or (c)
+// is a null pointer signifying that some specific procedure from
+// a containing scope has become inaccessible in a nested scope due
+// to the use of "IMPORT, NONE" or "IMPORT, ONLY:".
+
+#ifndef FLANG_RT_RUNTIME_NON_TBP_DIO_H_
+#define FLANG_RT_RUNTIME_NON_TBP_DIO_H_
+
+#include "flang/Common/Fortran-consts.h"
+#include "flang/Common/api-attrs.h"
+#include <cstddef>
+
+namespace Fortran::runtime::typeInfo {
+class DerivedType;
+} // namespace Fortran::runtime::typeInfo
+
+namespace Fortran::runtime::io {
+
+RT_OFFLOAD_API_GROUP_BEGIN
+
+struct NonTbpDefinedIo {
+ const typeInfo::DerivedType &derivedType;
+ void (*subroutine)(); // null means no non-TBP defined I/O here
+ common::DefinedIo definedIo;
+ bool isDtvArgPolymorphic; // first dummy arg is CLASS(T)
+};
+
+struct NonTbpDefinedIoTable {
+ RT_API_ATTRS const NonTbpDefinedIo *Find(
+ const typeInfo::DerivedType &, common::DefinedIo) const;
+ std::size_t items{0};
+ const NonTbpDefinedIo *item{nullptr};
+ // True when the only procedures to be used are the type-bound special
+ // procedures in the type information tables and any non-null procedures
+ // in this table. When false, the entries in this table override whatever
+ // non-type-bound specific procedures might be in the type information,
+ // but the remaining specifics remain visible.
+ bool ignoreNonTbpEntries{false};
+};
+
+RT_OFFLOAD_API_GROUP_END
+
+} // namespace Fortran::runtime::io
+#endif // FLANG_RT_RUNTIME_NON_TBP_DIO_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/numeric-templates.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/numeric-templates.h
new file mode 100644
index 00000000000..1253d56f3c0
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/numeric-templates.h
@@ -0,0 +1,371 @@
+//===-- include/flang-rt/runtime/numeric-templates.h ------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Generic class and function templates used for implementing
+// various numeric intrinsics (EXPONENT, FRACTION, etc.).
+//
+// This header file also defines generic templates for "basic"
+// math operations like abs, isnan, etc. The Float128Math
+// library provides specializations for these templates
+// for the data type corresponding to CppTypeFor<TypeCategory::Real, 16>
+// on the target.
+
+#ifndef FLANG_RT_RUNTIME_NUMERIC_TEMPLATES_H_
+#define FLANG_RT_RUNTIME_NUMERIC_TEMPLATES_H_
+
+#include "terminator.h"
+#include "tools.h"
+#include "flang/Common/api-attrs.h"
+#include "flang/Common/erfc-scaled.h"
+#include "flang/Common/float128.h"
+#include <cstdint>
+#include <limits>
+
+namespace Fortran::runtime {
+
+// MAX/MIN/LOWEST values for different data types.
+
+// MaxOrMinIdentity returns MAX or LOWEST value of the given type.
+template <TypeCategory CAT, int KIND, bool IS_MAXVAL, typename Enable = void>
+struct MaxOrMinIdentity {
+ using Type = CppTypeFor<CAT, KIND>;
+ static constexpr RT_API_ATTRS Type Value() {
+ return IS_MAXVAL ? std::numeric_limits<Type>::lowest()
+ : std::numeric_limits<Type>::max();
+ }
+};
+
+// std::numeric_limits<> may not know int128_t
+template <bool IS_MAXVAL>
+struct MaxOrMinIdentity<TypeCategory::Integer, 16, IS_MAXVAL> {
+ using Type = CppTypeFor<TypeCategory::Integer, 16>;
+ static constexpr RT_API_ATTRS Type Value() {
+ return IS_MAXVAL ? Type{1} << 127 : ~Type{0} >> 1;
+ }
+};
+
+#if HAS_FLOAT128
+// std::numeric_limits<> may not support __float128.
+//
+// Usage of GCC quadmath.h's FLT128_MAX is complicated by the fact that
+// even GCC complains about 'Q' literal suffix under -Wpedantic.
+// We just recreate FLT128_MAX ourselves.
+//
+// This specialization must engage only when
+// CppTypeFor<TypeCategory::Real, 16> is __float128.
+template <bool IS_MAXVAL>
+struct MaxOrMinIdentity<TypeCategory::Real, 16, IS_MAXVAL,
+ typename std::enable_if_t<
+ std::is_same_v<CppTypeFor<TypeCategory::Real, 16>, __float128>>> {
+ using Type = __float128;
+ static RT_API_ATTRS Type Value() {
+ // Create a buffer to store binary representation of __float128 constant.
+ constexpr std::size_t alignment =
+ std::max(alignof(Type), alignof(std::uint64_t));
+ alignas(alignment) char data[sizeof(Type)];
+
+ // First, verify that our interpretation of __float128 format is correct,
+ // e.g. by checking at least one known constant.
+ *reinterpret_cast<Type *>(data) = Type(1.0);
+ if (*reinterpret_cast<std::uint64_t *>(data) != 0 ||
+ *(reinterpret_cast<std::uint64_t *>(data) + 1) != 0x3FFF000000000000) {
+ Terminator terminator{__FILE__, __LINE__};
+ terminator.Crash("not yet implemented: no full support for __float128");
+ }
+
+ // Recreate FLT128_MAX.
+ *reinterpret_cast<std::uint64_t *>(data) = 0xFFFFFFFFFFFFFFFF;
+ *(reinterpret_cast<std::uint64_t *>(data) + 1) = 0x7FFEFFFFFFFFFFFF;
+ Type max = *reinterpret_cast<Type *>(data);
+ return IS_MAXVAL ? -max : max;
+ }
+};
+#endif // HAS_FLOAT128
+
+// Minimum finite representable value.
+// For floating-point types, returns minimum positive normalized value.
+template <int PREC, typename T> struct MinValue {
+ static RT_API_ATTRS T get() { return std::numeric_limits<T>::min(); }
+};
+template <typename T> struct MinValue<11, T> {
+ // TINY(0._2)
+ static constexpr RT_API_ATTRS T get() { return 0.00006103515625E-04; }
+};
+
+#if HAS_FLOAT128
+template <> struct MinValue<113, CppTypeFor<TypeCategory::Real, 16>> {
+ using Type = CppTypeFor<TypeCategory::Real, 16>;
+ static RT_API_ATTRS Type get() {
+ // Create a buffer to store binary representation of __float128 constant.
+ constexpr std::size_t alignment =
+ std::max(alignof(Type), alignof(std::uint64_t));
+ alignas(alignment) char data[sizeof(Type)];
+
+ // First, verify that our interpretation of __float128 format is correct,
+ // e.g. by checking at least one known constant.
+ *reinterpret_cast<Type *>(data) = Type(1.0);
+ if (*reinterpret_cast<std::uint64_t *>(data) != 0 ||
+ *(reinterpret_cast<std::uint64_t *>(data) + 1) != 0x3FFF000000000000) {
+ Terminator terminator{__FILE__, __LINE__};
+ terminator.Crash("not yet implemented: no full support for __float128");
+ }
+
+ // Recreate FLT128_MIN.
+ *reinterpret_cast<std::uint64_t *>(data) = 0;
+ *(reinterpret_cast<std::uint64_t *>(data) + 1) = 0x1000000000000;
+ return *reinterpret_cast<Type *>(data);
+ }
+};
+#endif // HAS_FLOAT128
+
+template <typename T> struct ABSTy {
+ static constexpr RT_API_ATTRS T compute(T x) { return std::abs(x); }
+};
+
+// Suppress the warnings about calling __host__-only
+// 'long double' std::frexp, from __device__ code.
+RT_DIAG_PUSH
+RT_DIAG_DISABLE_CALL_HOST_FROM_DEVICE_WARN
+
+template <typename T> struct FREXPTy {
+ static constexpr RT_API_ATTRS T compute(T x, int *e) {
+ return std::frexp(x, e);
+ }
+};
+
+RT_DIAG_POP
+
+template <typename T> struct ILOGBTy {
+ static constexpr RT_API_ATTRS int compute(T x) { return std::ilogb(x); }
+};
+
+template <typename T> struct ISINFTy {
+ static constexpr RT_API_ATTRS bool compute(T x) { return std::isinf(x); }
+};
+
+template <typename T> struct ISNANTy {
+ static constexpr RT_API_ATTRS bool compute(T x) { return std::isnan(x); }
+};
+
+template <typename T> struct LDEXPTy {
+ template <typename ET> static constexpr RT_API_ATTRS T compute(T x, ET e) {
+ return std::ldexp(x, e);
+ }
+};
+
+template <typename T> struct MAXTy {
+ static constexpr RT_API_ATTRS T compute() {
+ return std::numeric_limits<T>::max();
+ }
+};
+
+#if HAS_LDBL128 || HAS_FLOAT128
+template <> struct MAXTy<CppTypeFor<TypeCategory::Real, 16>> {
+ static CppTypeFor<TypeCategory::Real, 16> compute() {
+ return MaxOrMinIdentity<TypeCategory::Real, 16, true>::Value();
+ }
+};
+#endif
+
+template <int PREC, typename T> struct MINTy {
+ static constexpr RT_API_ATTRS T compute() { return MinValue<PREC, T>::get(); }
+};
+
+template <typename T> struct QNANTy {
+ static constexpr RT_API_ATTRS T compute() {
+ return std::numeric_limits<T>::quiet_NaN();
+ }
+};
+
+template <typename T> struct SQRTTy {
+ static constexpr RT_API_ATTRS T compute(T x) { return std::sqrt(x); }
+};
+
+// EXPONENT (16.9.75)
+template <typename RESULT, typename ARG>
+inline RT_API_ATTRS RESULT Exponent(ARG x) {
+ if (ISINFTy<ARG>::compute(x) || ISNANTy<ARG>::compute(x)) {
+ return MAXTy<RESULT>::compute(); // +/-Inf, NaN -> HUGE(0)
+ } else if (x == 0) {
+ return 0; // 0 -> 0
+ } else {
+ return ILOGBTy<ARG>::compute(x) + 1;
+ }
+}
+
+// FRACTION (16.9.80)
+template <typename T> inline RT_API_ATTRS T Fraction(T x) {
+ if (ISNANTy<T>::compute(x)) {
+ return x; // NaN -> same NaN
+ } else if (ISINFTy<T>::compute(x)) {
+ return QNANTy<T>::compute(); // +/-Inf -> NaN
+ } else if (x == 0) {
+ return x; // 0 -> same 0
+ } else {
+ int ignoredExp;
+ return FREXPTy<T>::compute(x, &ignoredExp);
+ }
+}
+
+// SET_EXPONENT (16.9.171)
+template <typename T> inline RT_API_ATTRS T SetExponent(T x, std::int64_t p) {
+ if (ISNANTy<T>::compute(x)) {
+ return x; // NaN -> same NaN
+ } else if (ISINFTy<T>::compute(x)) {
+ return QNANTy<T>::compute(); // +/-Inf -> NaN
+ } else if (x == 0) {
+ return x; // return negative zero if x is negative zero
+ } else {
+ int expo{ILOGBTy<T>::compute(x) + 1};
+ auto ip{static_cast<int>(p - expo)};
+ if (ip != p - expo) {
+ ip = p < 0 ? std::numeric_limits<int>::min()
+ : std::numeric_limits<int>::max();
+ }
+ return LDEXPTy<T>::compute(x, ip); // x*2**(p-e)
+ }
+}
+
+// MOD & MODULO (16.9.135, .136)
+template <bool IS_MODULO, typename T>
+inline RT_API_ATTRS T RealMod(
+ T a, T p, const char *sourceFile, int sourceLine) {
+ if (p == 0) {
+ Terminator{sourceFile, sourceLine}.Crash(
+ IS_MODULO ? "MODULO with P==0" : "MOD with P==0");
+ }
+ if (ISNANTy<T>::compute(a) || ISNANTy<T>::compute(p) ||
+ ISINFTy<T>::compute(a)) {
+ return QNANTy<T>::compute();
+ } else if (IS_MODULO && ISINFTy<T>::compute(p)) {
+ // Other compilers behave consistently for MOD(x, +/-INF)
+ // and always return x. This is probably related to
+ // implementation of std::fmod(). Stick to this behavior
+ // for MOD, but return NaN for MODULO(x, +/-INF).
+ return QNANTy<T>::compute();
+ }
+ T aAbs{ABSTy<T>::compute(a)};
+ T pAbs{ABSTy<T>::compute(p)};
+ if (aAbs <= static_cast<T>(std::numeric_limits<std::int64_t>::max()) &&
+ pAbs <= static_cast<T>(std::numeric_limits<std::int64_t>::max())) {
+ if (auto aInt{static_cast<std::int64_t>(a)}; a == aInt) {
+ if (auto pInt{static_cast<std::int64_t>(p)}; p == pInt) {
+ // Fast exact case for integer operands
+ auto mod{aInt - (aInt / pInt) * pInt};
+ if constexpr (IS_MODULO) {
+ if (mod == 0) {
+ // Return properly signed zero.
+ return pInt > 0 ? T{0} : -T{0};
+ }
+ if ((aInt > 0) != (pInt > 0)) {
+ mod += pInt;
+ }
+ } else {
+ if (mod == 0) {
+ // Return properly signed zero.
+ return aInt > 0 ? T{0} : -T{0};
+ }
+ }
+ return static_cast<T>(mod);
+ }
+ }
+ }
+ if constexpr (std::is_same_v<T, float> || std::is_same_v<T, double> ||
+ std::is_same_v<T, long double>) {
+ // std::fmod() semantics on signed operands seems to match
+ // the requirements of MOD(). MODULO() needs adjustment.
+ T result{std::fmod(a, p)};
+ if constexpr (IS_MODULO) {
+ if ((a < 0) != (p < 0)) {
+ if (result == 0.) {
+ result = -result;
+ } else {
+ result += p;
+ }
+ }
+ }
+ return result;
+ } else {
+ // The standard defines MOD(a,p)=a-AINT(a/p)*p and
+ // MODULO(a,p)=a-FLOOR(a/p)*p, but those definitions lose
+ // precision badly due to cancellation when ABS(a) is
+ // much larger than ABS(p).
+ // Insights:
+ // - MOD(a,p)=MOD(a-n*p,p) when a>0, p>0, integer n>0, and a>=n*p
+ // - when n is a power of two, n*p is exact
+ // - as a>=n*p, a-n*p does not round.
+ // So repeatedly reduce a by all n*p in decreasing order of n;
+ // what's left is the desired remainder. This is basically
+ // the same algorithm as arbitrary precision binary long division,
+ // discarding the quotient.
+ T tmp{aAbs};
+ for (T adj{SetExponent(pAbs, Exponent<int>(aAbs))}; tmp >= pAbs; adj /= 2) {
+ if (tmp >= adj) {
+ tmp -= adj;
+ if (tmp == 0) {
+ break;
+ }
+ }
+ }
+ if (a < 0) {
+ tmp = -tmp;
+ }
+ if constexpr (IS_MODULO) {
+ if ((a < 0) != (p < 0)) {
+ if (tmp == 0.) {
+ tmp = -tmp;
+ } else {
+ tmp += p;
+ }
+ }
+ }
+ return tmp;
+ }
+}
+
+// RRSPACING (16.9.164)
+template <int PREC, typename T> inline RT_API_ATTRS T RRSpacing(T x) {
+ if (ISNANTy<T>::compute(x)) {
+ return x; // NaN -> same NaN
+ } else if (ISINFTy<T>::compute(x)) {
+ return QNANTy<T>::compute(); // +/-Inf -> NaN
+ } else if (x == 0) {
+ return 0; // 0 -> 0
+ } else {
+ return LDEXPTy<T>::compute(
+ ABSTy<T>::compute(x), PREC - (ILOGBTy<T>::compute(x) + 1));
+ }
+}
+
+// SPACING (16.9.180)
+template <int PREC, typename T> inline RT_API_ATTRS T Spacing(T x) {
+ T tiny{MINTy<PREC, T>::compute()};
+ if (ISNANTy<T>::compute(x)) {
+ return x; // NaN -> same NaN
+ } else if (ISINFTy<T>::compute(x)) {
+ return QNANTy<T>::compute(); // +/-Inf -> NaN
+ } else if (x == 0) { // 0 -> TINY(x)
+ return tiny;
+ } else {
+ T result{LDEXPTy<T>::compute(
+ static_cast<T>(1.0), ILOGBTy<T>::compute(x) + 1 - PREC)}; // 2**(e-p)
+ // All compilers return TINY(x) for |x| <= TINY(x), but differ over whether
+ // SPACING(x) can be < TINY(x) for |x| > TINY(x). The most common precedent
+ // is to never return a value < TINY(x).
+ return result <= tiny ? tiny : result;
+ }
+}
+
+// ERFC_SCALED (16.9.71)
+template <typename T> inline RT_API_ATTRS T ErfcScaled(T arg) {
+ return common::ErfcScaled(arg);
+}
+
+} // namespace Fortran::runtime
+
+#endif // FLANG_RT_RUNTIME_NUMERIC_TEMPLATES_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/random-templates.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/random-templates.h
new file mode 100644
index 00000000000..895c5ad4fc8
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/random-templates.h
@@ -0,0 +1,111 @@
+//===-- include/flang-rt/runtime/random-templates.h -------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FLANG_RT_RUNTIME_RANDOM_TEMPLATES_H_
+#define FLANG_RT_RUNTIME_RANDOM_TEMPLATES_H_
+
+#include "descriptor.h"
+#include "lock.h"
+#include "numeric-templates.h"
+#include "flang/Common/optional.h"
+#include <algorithm>
+#include <random>
+
+namespace Fortran::runtime::random {
+
+// Newer "Minimum standard", recommended by Park, Miller, and Stockmeyer in
+// 1993. Same as C++17 std::minstd_rand, but explicitly instantiated for
+// permanence.
+using Generator =
+ std::linear_congruential_engine<std::uint_fast32_t, 48271, 0, 2147483647>;
+
+using GeneratedWord = typename Generator::result_type;
+static constexpr std::uint64_t range{
+ static_cast<std::uint64_t>(Generator::max() - Generator::min() + 1)};
+static constexpr bool rangeIsPowerOfTwo{(range & (range - 1)) == 0};
+static constexpr int rangeBits{
+ 64 - common::LeadingZeroBitCount(range) - !rangeIsPowerOfTwo};
+
+extern Lock lock;
+extern Generator generator;
+extern Fortran::common::optional<GeneratedWord> nextValue;
+
+// Call only with lock held
+static GeneratedWord GetNextValue() {
+ GeneratedWord result;
+ if (nextValue.has_value()) {
+ result = *nextValue;
+ nextValue.reset();
+ } else {
+ result = generator();
+ }
+ return result;
+}
+
+template <typename REAL, int PREC>
+inline void GenerateReal(const Descriptor &harvest) {
+ static constexpr std::size_t minBits{
+ std::max<std::size_t>(PREC, 8 * sizeof(GeneratedWord))};
+ using Int = common::HostUnsignedIntType<minBits>;
+ static constexpr std::size_t words{
+ static_cast<std::size_t>(PREC + rangeBits - 1) / rangeBits};
+ std::size_t elements{harvest.Elements()};
+ SubscriptValue at[maxRank];
+ harvest.GetLowerBounds(at);
+ {
+ CriticalSection critical{lock};
+ for (std::size_t j{0}; j < elements; ++j) {
+ while (true) {
+ Int fraction{GetNextValue()};
+ if constexpr (words > 1) {
+ for (std::size_t k{1}; k < words; ++k) {
+ static constexpr auto rangeMask{
+ (GeneratedWord{1} << rangeBits) - 1};
+ GeneratedWord word{(GetNextValue() - generator.min()) & rangeMask};
+ fraction = (fraction << rangeBits) | word;
+ }
+ }
+ fraction >>= words * rangeBits - PREC;
+ REAL next{
+ LDEXPTy<REAL>::compute(static_cast<REAL>(fraction), -(PREC + 1))};
+ if (next >= 0.0 && next < 1.0) {
+ *harvest.Element<REAL>(at) = next;
+ break;
+ }
+ }
+ harvest.IncrementSubscripts(at);
+ }
+ }
+}
+
+template <typename UINT>
+inline void GenerateUnsigned(const Descriptor &harvest) {
+ static constexpr std::size_t words{
+ (8 * sizeof(UINT) + rangeBits - 1) / rangeBits};
+ std::size_t elements{harvest.Elements()};
+ SubscriptValue at[maxRank];
+ harvest.GetLowerBounds(at);
+ {
+ CriticalSection critical{lock};
+ for (std::size_t j{0}; j < elements; ++j) {
+ UINT next{static_cast<UINT>(GetNextValue())};
+ if constexpr (words > 1) {
+ for (std::size_t k{1}; k < words; ++k) {
+ next <<= rangeBits;
+ next |= GetNextValue();
+ }
+ }
+ *harvest.Element<UINT>(at) = next;
+ harvest.IncrementSubscripts(at);
+ }
+ }
+}
+
+} // namespace Fortran::runtime::random
+
+#endif // FLANG_RT_RUNTIME_RANDOM_TEMPLATES_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/reduction-templates.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/reduction-templates.h
new file mode 100644
index 00000000000..18412708b02
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/reduction-templates.h
@@ -0,0 +1,419 @@
+//===-- include/flang-rt/runtime/reduction-templates.h ----------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Generic function templates used by various reduction transformation
+// intrinsic functions (SUM, PRODUCT, &c.)
+//
+// * Partial reductions (i.e., those with DIM= arguments that are not
+// required to be 1 by the rank of the argument) return arrays that
+// are dynamically allocated in a caller-supplied descriptor.
+// * Total reductions (i.e., no DIM= argument) with FINDLOC, MAXLOC, & MINLOC
+// return integer vectors of some kind, not scalars; a caller-supplied
+// descriptor is used
+// * Character-valued reductions (MAXVAL & MINVAL) return arbitrary
+// length results, dynamically allocated in a caller-supplied descriptor
+
+#ifndef FLANG_RT_RUNTIME_REDUCTION_TEMPLATES_H_
+#define FLANG_RT_RUNTIME_REDUCTION_TEMPLATES_H_
+
+#include "descriptor.h"
+#include "numeric-templates.h"
+#include "terminator.h"
+#include "tools.h"
+#include "flang/Runtime/cpp-type.h"
+#include <algorithm>
+
+namespace Fortran::runtime {
+
+// Reductions are implemented with *accumulators*, which are instances of
+// classes that incrementally build up the result (or an element thereof) during
+// a traversal of the unmasked elements of an array. Each accumulator class
+// supports a constructor (which captures a reference to the array), an
+// AccumulateAt() member function that applies supplied subscripts to the
+// array and does something with a scalar element, and a GetResult()
+// member function that copies a final result into its destination.
+
+// Total reduction of the array argument to a scalar (or to a vector in the
+// cases of FINDLOC, MAXLOC, & MINLOC). These are the cases without DIM= or
+// cases where the argument has rank 1 and DIM=, if present, must be 1.
+template <typename TYPE, typename ACCUMULATOR>
+inline RT_API_ATTRS void DoTotalReduction(const Descriptor &x, int dim,
+ const Descriptor *mask, ACCUMULATOR &accumulator, const char *intrinsic,
+ Terminator &terminator) {
+ if (dim < 0 || dim > 1) {
+ terminator.Crash("%s: bad DIM=%d for ARRAY argument with rank %d",
+ intrinsic, dim, x.rank());
+ }
+ SubscriptValue xAt[maxRank];
+ x.GetLowerBounds(xAt);
+ if (mask) {
+ CheckConformability(x, *mask, terminator, intrinsic, "ARRAY", "MASK");
+ if (mask->rank() > 0) {
+ SubscriptValue maskAt[maxRank];
+ mask->GetLowerBounds(maskAt);
+ for (auto elements{x.Elements()}; elements--;
+ x.IncrementSubscripts(xAt), mask->IncrementSubscripts(maskAt)) {
+ if (IsLogicalElementTrue(*mask, maskAt)) {
+ if (!accumulator.template AccumulateAt<TYPE>(xAt)) {
+ break;
+ }
+ }
+ }
+ return;
+ } else if (!IsLogicalScalarTrue(*mask)) {
+ // scalar MASK=.FALSE.: return identity value
+ return;
+ }
+ }
+ // No MASK=, or scalar MASK=.TRUE.
+ for (auto elements{x.Elements()}; elements--; x.IncrementSubscripts(xAt)) {
+ if (!accumulator.template AccumulateAt<TYPE>(xAt)) {
+ break; // cut short, result is known
+ }
+ }
+}
+
+template <TypeCategory CAT, int KIND, typename ACCUMULATOR>
+inline RT_API_ATTRS CppTypeFor<CAT, KIND> GetTotalReduction(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask,
+ ACCUMULATOR &&accumulator, const char *intrinsic,
+ bool allowUnsignedForInteger = false) {
+ Terminator terminator{source, line};
+ RUNTIME_CHECK(terminator,
+ TypeCode(CAT, KIND) == x.type() ||
+ (CAT == TypeCategory::Integer && allowUnsignedForInteger &&
+ TypeCode(TypeCategory::Unsigned, KIND) == x.type()));
+ using CppType = CppTypeFor<CAT, KIND>;
+ DoTotalReduction<CppType>(x, dim, mask, accumulator, intrinsic, terminator);
+ if constexpr (std::is_void_v<CppType>) {
+ // Result is returned from accumulator, as in REDUCE() for derived type
+#ifdef _MSC_VER // work around MSVC spurious error
+ accumulator.GetResult();
+#else
+ accumulator.template GetResult<CppType>();
+#endif
+ } else {
+ CppType result;
+#ifdef _MSC_VER // work around MSVC spurious error
+ accumulator.GetResult(&result);
+#else
+ accumulator.template GetResult<CppType>(&result);
+#endif
+ return result;
+ }
+}
+
+// For reductions on a dimension, e.g. SUM(array,DIM=2) where the shape
+// of the array is [2,3,5], the shape of the result is [2,5] and
+// result(j,k) = SUM(array(j,:,k)), possibly modified if the array has
+// lower bounds other than one. This utility subroutine creates an
+// array of subscripts [j,_,k] for result subscripts [j,k] so that the
+// elements of array(j,:,k) can be reduced.
+inline RT_API_ATTRS void GetExpandedSubscripts(SubscriptValue at[],
+ const Descriptor &descriptor, int zeroBasedDim,
+ const SubscriptValue from[]) {
+ descriptor.GetLowerBounds(at);
+ int rank{descriptor.rank()};
+ int j{0};
+ for (; j < zeroBasedDim; ++j) {
+ at[j] += from[j] - 1 /*lower bound*/;
+ }
+ for (++j; j < rank; ++j) {
+ at[j] += from[j - 1] - 1;
+ }
+}
+
+template <typename TYPE, typename ACCUMULATOR>
+inline RT_API_ATTRS void ReduceDimToScalar(const Descriptor &x,
+ int zeroBasedDim, SubscriptValue subscripts[], TYPE *result,
+ ACCUMULATOR &accumulator) {
+ SubscriptValue xAt[maxRank];
+ GetExpandedSubscripts(xAt, x, zeroBasedDim, subscripts);
+ const auto &dim{x.GetDimension(zeroBasedDim)};
+ SubscriptValue at{dim.LowerBound()};
+ for (auto n{dim.Extent()}; n-- > 0; ++at) {
+ xAt[zeroBasedDim] = at;
+ if (!accumulator.template AccumulateAt<TYPE>(xAt)) {
+ break;
+ }
+ }
+#ifdef _MSC_VER // work around MSVC spurious error
+ accumulator.GetResult(result, zeroBasedDim);
+#else
+ accumulator.template GetResult<TYPE>(result, zeroBasedDim);
+#endif
+}
+
+template <typename TYPE, typename ACCUMULATOR>
+inline RT_API_ATTRS void ReduceDimMaskToScalar(const Descriptor &x,
+ int zeroBasedDim, SubscriptValue subscripts[], const Descriptor &mask,
+ TYPE *result, ACCUMULATOR &accumulator) {
+ SubscriptValue xAt[maxRank], maskAt[maxRank];
+ GetExpandedSubscripts(xAt, x, zeroBasedDim, subscripts);
+ GetExpandedSubscripts(maskAt, mask, zeroBasedDim, subscripts);
+ const auto &xDim{x.GetDimension(zeroBasedDim)};
+ SubscriptValue xPos{xDim.LowerBound()};
+ const auto &maskDim{mask.GetDimension(zeroBasedDim)};
+ SubscriptValue maskPos{maskDim.LowerBound()};
+ for (auto n{x.GetDimension(zeroBasedDim).Extent()}; n-- > 0;
+ ++xPos, ++maskPos) {
+ maskAt[zeroBasedDim] = maskPos;
+ if (IsLogicalElementTrue(mask, maskAt)) {
+ xAt[zeroBasedDim] = xPos;
+ if (!accumulator.template AccumulateAt<TYPE>(xAt)) {
+ break;
+ }
+ }
+ }
+#ifdef _MSC_VER // work around MSVC spurious error
+ accumulator.GetResult(result, zeroBasedDim);
+#else
+ accumulator.template GetResult<TYPE>(result, zeroBasedDim);
+#endif
+}
+
+// Partial reductions with DIM=
+
+template <typename ACCUMULATOR, TypeCategory CAT, int KIND>
+inline RT_API_ATTRS void PartialReduction(Descriptor &result,
+ const Descriptor &x, std::size_t resultElementSize, int dim,
+ const Descriptor *mask, Terminator &terminator, const char *intrinsic,
+ ACCUMULATOR &accumulator) {
+ CreatePartialReductionResult(result, x, resultElementSize, dim, terminator,
+ intrinsic, TypeCode{CAT, KIND});
+ SubscriptValue at[maxRank];
+ result.GetLowerBounds(at);
+ INTERNAL_CHECK(result.rank() == 0 || at[0] == 1);
+ using CppType = CppTypeFor<CAT, KIND>;
+ if (mask) {
+ CheckConformability(x, *mask, terminator, intrinsic, "ARRAY", "MASK");
+ if (mask->rank() > 0) {
+ for (auto n{result.Elements()}; n-- > 0; result.IncrementSubscripts(at)) {
+ accumulator.Reinitialize();
+ ReduceDimMaskToScalar<CppType, ACCUMULATOR>(
+ x, dim - 1, at, *mask, result.Element<CppType>(at), accumulator);
+ }
+ return;
+ } else if (!IsLogicalScalarTrue(*mask)) {
+ // scalar MASK=.FALSE.
+ accumulator.Reinitialize();
+ for (auto n{result.Elements()}; n-- > 0; result.IncrementSubscripts(at)) {
+ accumulator.GetResult(result.Element<CppType>(at));
+ }
+ return;
+ }
+ }
+ // No MASK= or scalar MASK=.TRUE.
+ for (auto n{result.Elements()}; n-- > 0; result.IncrementSubscripts(at)) {
+ accumulator.Reinitialize();
+ ReduceDimToScalar<CppType, ACCUMULATOR>(
+ x, dim - 1, at, result.Element<CppType>(at), accumulator);
+ }
+}
+
+template <template <typename> class ACCUM>
+struct PartialIntegerReductionHelper {
+ template <int KIND> struct Functor {
+ static constexpr int Intermediate{
+ std::max(KIND, 4)}; // use at least "int" for intermediate results
+ RT_API_ATTRS void operator()(Descriptor &result, const Descriptor &x,
+ int dim, const Descriptor *mask, Terminator &terminator,
+ const char *intrinsic) const {
+ using Accumulator =
+ ACCUM<CppTypeFor<TypeCategory::Integer, Intermediate>>;
+ Accumulator accumulator{x};
+ // Element size of the destination descriptor is the same
+ // as the element size of the source.
+ PartialReduction<Accumulator, TypeCategory::Integer, KIND>(result, x,
+ x.ElementBytes(), dim, mask, terminator, intrinsic, accumulator);
+ }
+ };
+};
+
+template <template <typename> class INTEGER_ACCUM>
+inline RT_API_ATTRS void PartialIntegerReduction(Descriptor &result,
+ const Descriptor &x, int dim, int kind, const Descriptor *mask,
+ const char *intrinsic, Terminator &terminator) {
+ ApplyIntegerKind<
+ PartialIntegerReductionHelper<INTEGER_ACCUM>::template Functor, void>(
+ kind, terminator, result, x, dim, mask, terminator, intrinsic);
+}
+
+template <TypeCategory CAT, template <typename> class ACCUM, int MIN_KIND>
+struct PartialFloatingReductionHelper {
+ template <int KIND> struct Functor {
+ static constexpr int Intermediate{std::max(KIND, MIN_KIND)};
+ RT_API_ATTRS void operator()(Descriptor &result, const Descriptor &x,
+ int dim, const Descriptor *mask, Terminator &terminator,
+ const char *intrinsic) const {
+ using Accumulator = ACCUM<CppTypeFor<TypeCategory::Real, Intermediate>>;
+ Accumulator accumulator{x};
+ // Element size of the destination descriptor is the same
+ // as the element size of the source.
+ PartialReduction<Accumulator, CAT, KIND>(result, x, x.ElementBytes(), dim,
+ mask, terminator, intrinsic, accumulator);
+ }
+ };
+};
+
+template <template <typename> class INTEGER_ACCUM,
+ template <typename> class REAL_ACCUM,
+ template <typename> class COMPLEX_ACCUM, int MIN_REAL_KIND>
+inline RT_API_ATTRS void TypedPartialNumericReduction(Descriptor &result,
+ const Descriptor &x, int dim, const char *source, int line,
+ const Descriptor *mask, const char *intrinsic) {
+ Terminator terminator{source, line};
+ auto catKind{x.type().GetCategoryAndKind()};
+ RUNTIME_CHECK(terminator, catKind.has_value());
+ switch (catKind->first) {
+ case TypeCategory::Integer:
+ PartialIntegerReduction<INTEGER_ACCUM>(
+ result, x, dim, catKind->second, mask, intrinsic, terminator);
+ break;
+ case TypeCategory::Real:
+ ApplyFloatingPointKind<PartialFloatingReductionHelper<TypeCategory::Real,
+ REAL_ACCUM, MIN_REAL_KIND>::template Functor,
+ void>(catKind->second, terminator, result, x, dim, mask, terminator,
+ intrinsic);
+ break;
+ case TypeCategory::Complex:
+ ApplyFloatingPointKind<PartialFloatingReductionHelper<TypeCategory::Complex,
+ COMPLEX_ACCUM, MIN_REAL_KIND>::template Functor,
+ void>(catKind->second, terminator, result, x, dim, mask, terminator,
+ intrinsic);
+ break;
+ default:
+ terminator.Crash("%s: bad type code %d", intrinsic, x.type().raw());
+ }
+}
+
+template <typename ACCUMULATOR> struct LocationResultHelper {
+ template <int KIND> struct Functor {
+ RT_API_ATTRS void operator()(
+ ACCUMULATOR &accumulator, const Descriptor &result) const {
+ accumulator.GetResult(
+ result.OffsetElement<CppTypeFor<TypeCategory::Integer, KIND>>());
+ }
+ };
+};
+
+template <typename ACCUMULATOR> struct PartialLocationHelper {
+ template <int KIND> struct Functor {
+ RT_API_ATTRS void operator()(Descriptor &result, const Descriptor &x,
+ int dim, const Descriptor *mask, Terminator &terminator,
+ const char *intrinsic, ACCUMULATOR &accumulator) const {
+ // Element size of the destination descriptor is the size
+ // of {TypeCategory::Integer, KIND}.
+ PartialReduction<ACCUMULATOR, TypeCategory::Integer, KIND>(result, x,
+ Descriptor::BytesFor(TypeCategory::Integer, KIND), dim, mask,
+ terminator, intrinsic, accumulator);
+ }
+ };
+};
+
+// NORM2 templates
+
+RT_VAR_GROUP_BEGIN
+
+// Use at least double precision for accumulators.
+// Don't use __float128, it doesn't work with abs() or sqrt() yet.
+static constexpr RT_CONST_VAR_ATTRS int Norm2LargestLDKind{
+#if HAS_LDBL128 || HAS_FLOAT128
+ 16
+#elif HAS_FLOAT80
+ 10
+#else
+ 8
+#endif
+};
+
+RT_VAR_GROUP_END
+
+template <TypeCategory CAT, int KIND, typename ACCUMULATOR>
+inline RT_API_ATTRS void DoMaxMinNorm2(Descriptor &result, const Descriptor &x,
+ int dim, const Descriptor *mask, const char *intrinsic,
+ Terminator &terminator) {
+ using Type = CppTypeFor<CAT, KIND>;
+ ACCUMULATOR accumulator{x};
+ if (dim == 0 || x.rank() == 1) {
+ // Total reduction
+
+ // Element size of the destination descriptor is the same
+ // as the element size of the source.
+ result.Establish(x.type(), x.ElementBytes(), nullptr, 0, nullptr,
+ CFI_attribute_allocatable);
+ if (int stat{result.Allocate(kNoAsyncObject)}) {
+ terminator.Crash(
+ "%s: could not allocate memory for result; STAT=%d", intrinsic, stat);
+ }
+ DoTotalReduction<Type>(x, dim, mask, accumulator, intrinsic, terminator);
+ accumulator.GetResult(result.OffsetElement<Type>());
+ } else {
+ // Partial reduction
+
+ // Element size of the destination descriptor is the same
+ // as the element size of the source.
+ PartialReduction<ACCUMULATOR, CAT, KIND>(result, x, x.ElementBytes(), dim,
+ mask, terminator, intrinsic, accumulator);
+ }
+}
+
+// The data type used by Norm2Accumulator.
+template <int KIND>
+using Norm2AccumType =
+ CppTypeFor<TypeCategory::Real, std::clamp(KIND, 8, Norm2LargestLDKind)>;
+
+template <int KIND> class Norm2Accumulator {
+public:
+ using Type = CppTypeFor<TypeCategory::Real, KIND>;
+ using AccumType = Norm2AccumType<KIND>;
+ explicit RT_API_ATTRS Norm2Accumulator(const Descriptor &array)
+ : array_{array} {}
+ RT_API_ATTRS void Reinitialize() { max_ = sum_ = 0; }
+ template <typename A>
+ RT_API_ATTRS void GetResult(A *p, int /*zeroBasedDim*/ = -1) const {
+ // m * sqrt(1 + sum((others(:)/m)**2))
+ *p = static_cast<Type>(max_ * SQRTTy<AccumType>::compute(1 + sum_));
+ }
+ RT_API_ATTRS bool Accumulate(Type x) {
+ auto absX{ABSTy<AccumType>::compute(static_cast<AccumType>(x))};
+ if (!max_) {
+ max_ = absX;
+ } else if (absX > max_) {
+ auto t{max_ / absX}; // < 1.0
+ auto tsq{t * t};
+ sum_ *= tsq; // scale sum to reflect change to the max
+ sum_ += tsq; // include a term for the previous max
+ max_ = absX;
+ } else { // absX <= max_
+ auto t{absX / max_};
+ sum_ += t * t;
+ }
+ return true;
+ }
+ template <typename A>
+ RT_API_ATTRS bool AccumulateAt(const SubscriptValue at[]) {
+ return Accumulate(*array_.Element<A>(at));
+ }
+
+private:
+ const Descriptor &array_;
+ AccumType max_{0}; // value (m) with largest magnitude
+ AccumType sum_{0}; // sum((others(:)/m)**2)
+};
+
+template <int KIND> struct Norm2Helper {
+ RT_API_ATTRS void operator()(Descriptor &result, const Descriptor &x, int dim,
+ const Descriptor *mask, Terminator &terminator) const {
+ DoMaxMinNorm2<TypeCategory::Real, KIND, Norm2Accumulator<KIND>>(
+ result, x, dim, mask, "NORM2", terminator);
+ }
+};
+
+} // namespace Fortran::runtime
+#endif // FLANG_RT_RUNTIME_REDUCTION_TEMPLATES_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/stat.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/stat.h
new file mode 100644
index 00000000000..dc372de5350
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/stat.h
@@ -0,0 +1,67 @@
+//===-- include/flang-rt/runtime/stat.h -------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Defines the values returned by the runtime for STAT= specifiers
+// on executable statements.
+
+#ifndef FLANG_RT_RUNTIME_STAT_H_
+#define FLANG_RT_RUNTIME_STAT_H_
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
+#include "flang/Common/api-attrs.h"
+#include "flang/Runtime/magic-numbers.h"
+namespace Fortran::runtime {
+
+class Descriptor;
+class Terminator;
+
+// The value of STAT= is zero when no error condition has arisen.
+
+enum Stat {
+ StatOk = 0, // required to be zero by Fortran
+
+ // Interoperable STAT= codes (>= 11)
+ StatBaseNull = CFI_ERROR_BASE_ADDR_NULL,
+ StatBaseNotNull = CFI_ERROR_BASE_ADDR_NOT_NULL,
+ StatInvalidElemLen = CFI_INVALID_ELEM_LEN,
+ StatInvalidRank = CFI_INVALID_RANK,
+ StatInvalidType = CFI_INVALID_TYPE,
+ StatInvalidAttribute = CFI_INVALID_ATTRIBUTE,
+ StatInvalidExtent = CFI_INVALID_EXTENT,
+ StatInvalidDescriptor = CFI_INVALID_DESCRIPTOR,
+ StatMemAllocation = CFI_ERROR_MEM_ALLOCATION,
+ StatOutOfBounds = CFI_ERROR_OUT_OF_BOUNDS,
+
+ // Standard STAT= values (>= 101)
+ StatFailedImage = FORTRAN_RUNTIME_STAT_FAILED_IMAGE,
+ StatLocked = FORTRAN_RUNTIME_STAT_LOCKED,
+ StatLockedOtherImage = FORTRAN_RUNTIME_STAT_LOCKED_OTHER_IMAGE,
+ StatMissingEnvVariable = FORTRAN_RUNTIME_STAT_MISSING_ENV_VAR,
+ StatMissingCurrentWorkDirectory = FORTRAN_RUNTIME_STAT_MISSING_CWD,
+ StatStoppedImage = FORTRAN_RUNTIME_STAT_STOPPED_IMAGE,
+ StatUnlocked = FORTRAN_RUNTIME_STAT_UNLOCKED,
+ StatUnlockedFailedImage = FORTRAN_RUNTIME_STAT_UNLOCKED_FAILED_IMAGE,
+
+ // Additional "processor-defined" STAT= values
+ StatInvalidArgumentNumber = FORTRAN_RUNTIME_STAT_INVALID_ARG_NUMBER,
+ StatMissingArgument = FORTRAN_RUNTIME_STAT_MISSING_ARG,
+ StatValueTooShort = FORTRAN_RUNTIME_STAT_VALUE_TOO_SHORT, // -1
+ StatMoveAllocSameAllocatable =
+ FORTRAN_RUNTIME_STAT_MOVE_ALLOC_SAME_ALLOCATABLE,
+ StatBadPointerDeallocation = FORTRAN_RUNTIME_STAT_BAD_POINTER_DEALLOCATION,
+
+ // Dummy status for work queue continuation, declared here to perhaps
+ // avoid collisions
+ StatContinue = 201
+};
+
+RT_API_ATTRS const char *StatErrorString(int);
+RT_API_ATTRS int ToErrmsg(const Descriptor *errmsg, int stat); // returns stat
+RT_API_ATTRS int ReturnError(Terminator &, int stat,
+ const Descriptor *errmsg = nullptr, bool hasStat = false);
+} // namespace Fortran::runtime
+#endif // FLANG_RT_RUNTIME_STAT_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/terminator.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/terminator.h
new file mode 100644
index 00000000000..047b576be4b
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/terminator.h
@@ -0,0 +1,139 @@
+//===-- include/flang-rt/runtime/terminator.h -------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Termination of the image
+
+#ifndef FLANG_RT_RUNTIME_TERMINATOR_H_
+#define FLANG_RT_RUNTIME_TERMINATOR_H_
+
+#include "flang/Common/api-attrs.h"
+#include <cstdarg>
+#include <cstdio>
+#include <cstdlib>
+
+namespace Fortran::runtime {
+
+// A mixin class for statement-specific image error termination
+// for errors detected in the runtime library
+class Terminator {
+public:
+ RT_API_ATTRS Terminator() {}
+ Terminator(const Terminator &) = default;
+ explicit RT_API_ATTRS Terminator(
+ const char *sourceFileName, int sourceLine = 0)
+ : sourceFileName_{sourceFileName}, sourceLine_{sourceLine} {}
+
+ RT_API_ATTRS const char *sourceFileName() const { return sourceFileName_; }
+ RT_API_ATTRS int sourceLine() const { return sourceLine_; }
+
+ RT_API_ATTRS void SetLocation(
+ const char *sourceFileName = nullptr, int sourceLine = 0) {
+ sourceFileName_ = sourceFileName;
+ sourceLine_ = sourceLine;
+ }
+
+ // Silence compiler warnings about the format string being
+ // non-literal. A more precise control would be
+ // __attribute__((format_arg(2))), but it requires the function
+ // to return 'char *', which does not work well with noreturn.
+#if defined(__clang__)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wformat-security"
+#elif defined(__GNUC__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wformat-security"
+#endif
+
+ // Device offload compilers do not normally support varargs and va_list,
+ // so use C++ variadic templates to forward the crash arguments
+ // to regular printf for the device compilation.
+ // Try to keep the inline implementations as small as possible.
+ template <typename... Args>
+ [[noreturn]] RT_DEVICE_NOINLINE RT_API_ATTRS const char *Crash(
+ const char *message, Args... args) const {
+#if !defined(RT_DEVICE_COMPILATION)
+ // Invoke handler set up by the test harness.
+ InvokeCrashHandler(message, args...);
+#endif
+ CrashHeader();
+ PrintCrashArgs(message, args...);
+ CrashFooter();
+ }
+
+ template <typename... Args>
+ RT_API_ATTRS void PrintCrashArgs(const char *message, Args... args) const {
+#if defined(RT_DEVICE_COMPILATION)
+ std::printf(message, args...);
+#else
+ std::fprintf(stderr, message, args...);
+#endif
+ }
+
+#if defined(__clang__)
+#pragma clang diagnostic pop
+#elif defined(__GNUC__)
+#pragma GCC diagnostic pop
+#endif
+
+ RT_API_ATTRS void CrashHeader() const;
+ [[noreturn]] RT_API_ATTRS void CrashFooter() const;
+#if !defined(RT_DEVICE_COMPILATION)
+ void InvokeCrashHandler(const char *message, ...) const;
+ [[noreturn]] void CrashArgs(const char *message, va_list &) const;
+#endif
+ [[noreturn]] RT_API_ATTRS void CheckFailed(
+ const char *predicate, const char *file, int line) const;
+ [[noreturn]] RT_API_ATTRS void CheckFailed(const char *predicate) const;
+
+ // For test harnessing - overrides CrashArgs().
+ static void RegisterCrashHandler(void (*)(const char *sourceFile,
+ int sourceLine, const char *message, va_list &ap));
+
+private:
+ const char *sourceFileName_{nullptr};
+ int sourceLine_{0};
+};
+
+// RUNTIME_CHECK() guarantees evaluation of its predicate.
+#define RUNTIME_CHECK(terminator, pred) \
+ if (pred) \
+ ; \
+ else \
+ (terminator).CheckFailed(#pred, __FILE__, __LINE__)
+
+#define INTERNAL_CHECK(pred) \
+ if (pred) \
+ ; \
+ else \
+ Terminator{__FILE__, __LINE__}.CheckFailed(#pred)
+
+RT_API_ATTRS void NotifyOtherImagesOfNormalEnd();
+RT_API_ATTRS void NotifyOtherImagesOfFailImageStatement();
+RT_API_ATTRS void NotifyOtherImagesOfErrorTermination();
+
+#if defined(RT_DEVICE_COMPILATION)
+/// Trap the execution on the device.
+[[noreturn]] static inline void RT_API_ATTRS DeviceTrap() {
+#if defined(__CUDACC__)
+ // NVCC supports __trap().
+ __trap();
+#elif defined(__clang__)
+ // Clang supports __builtin_trap().
+ __builtin_trap();
+#else
+#error "unsupported compiler"
+#endif
+}
+#endif
+} // namespace Fortran::runtime
+
+namespace Fortran::runtime::io {
+RT_API_ATTRS void FlushOutputOnCrash(const Terminator &);
+}
+
+#endif // FLANG_RT_RUNTIME_TERMINATOR_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/tools.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/tools.h
new file mode 100644
index 00000000000..a1b96f41f49
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/tools.h
@@ -0,0 +1,576 @@
+//===-- include/flang-rt/runtime/tools.h ------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FLANG_RT_RUNTIME_TOOLS_H_
+#define FLANG_RT_RUNTIME_TOOLS_H_
+
+#include "descriptor.h"
+#include "memory.h"
+#include "stat.h"
+#include "terminator.h"
+#include "flang/Common/optional.h"
+#include "flang/Runtime/cpp-type.h"
+#include "flang/Runtime/freestanding-tools.h"
+#include <cstring>
+#include <functional>
+#include <map>
+#include <type_traits>
+
+/// \macro RT_PRETTY_FUNCTION
+/// Gets a user-friendly looking function signature for the current scope
+/// using the best available method on each platform. The exact format of the
+/// resulting string is implementation specific and non-portable, so this should
+/// only be used, for example, for logging or diagnostics.
+/// Copy of LLVM_PRETTY_FUNCTION
+#if defined(_MSC_VER)
+#define RT_PRETTY_FUNCTION __FUNCSIG__
+#elif defined(__GNUC__) || defined(__clang__)
+#define RT_PRETTY_FUNCTION __PRETTY_FUNCTION__
+#else
+#define RT_PRETTY_FUNCTION __func__
+#endif
+
+#if defined(RT_DEVICE_COMPILATION)
+// Use the pseudo lock and pseudo file unit implementations
+// for the device.
+#define RT_USE_PSEUDO_LOCK 1
+#define RT_USE_PSEUDO_FILE_UNIT 1
+#endif
+
+namespace Fortran::runtime {
+
+class Terminator;
+
+RT_API_ATTRS std::size_t TrimTrailingSpaces(const char *, std::size_t);
+
+RT_API_ATTRS OwningPtr<char> SaveDefaultCharacter(
+ const char *, std::size_t, const Terminator &);
+
+// For validating and recognizing default CHARACTER values in a
+// case-insensitive manner. Returns the zero-based index into the
+// null-terminated array of upper-case possibilities when the value is valid,
+// or -1 when it has no match.
+RT_API_ATTRS int IdentifyValue(
+ const char *value, std::size_t length, const char *possibilities[]);
+
+// Truncates or pads as necessary
+RT_API_ATTRS void ToFortranDefaultCharacter(
+ char *to, std::size_t toLength, const char *from);
+
+// Utilities for dealing with elemental LOGICAL arguments
+inline RT_API_ATTRS bool IsLogicalElementTrue(
+ const Descriptor &logical, const SubscriptValue at[]) {
+ // A LOGICAL value is false if and only if all of its bytes are zero.
+ const char *p{logical.Element<char>(at)};
+ for (std::size_t j{logical.ElementBytes()}; j-- > 0; ++p) {
+ if (*p) {
+ return true;
+ }
+ }
+ return false;
+}
+inline RT_API_ATTRS bool IsLogicalScalarTrue(const Descriptor &logical) {
+ // A LOGICAL value is false if and only if all of its bytes are zero.
+ const char *p{logical.OffsetElement<char>()};
+ for (std::size_t j{logical.ElementBytes()}; j-- > 0; ++p) {
+ if (*p) {
+ return true;
+ }
+ }
+ return false;
+}
+
+// Check array conformability; a scalar 'x' conforms. Crashes on error.
+RT_API_ATTRS void CheckConformability(const Descriptor &to, const Descriptor &x,
+ Terminator &, const char *funcName, const char *toName,
+ const char *fromName);
+
+// Helper to store integer value in result[at].
+template <int KIND> struct StoreIntegerAt {
+ RT_API_ATTRS void operator()(const Fortran::runtime::Descriptor &result,
+ std::size_t at, std::int64_t value) const {
+ *result.ZeroBasedIndexedElement<Fortran::runtime::CppTypeFor<
+ Fortran::common::TypeCategory::Integer, KIND>>(at) = value;
+ }
+};
+
+// Helper to store floating value in result[at].
+template <int KIND> struct StoreFloatingPointAt {
+ RT_API_ATTRS void operator()(const Fortran::runtime::Descriptor &result,
+ std::size_t at, std::double_t value) const {
+ *result.ZeroBasedIndexedElement<Fortran::runtime::CppTypeFor<
+ Fortran::common::TypeCategory::Real, KIND>>(at) = value;
+ }
+};
+
+// Validate a KIND= argument
+RT_API_ATTRS void CheckIntegerKind(
+ Terminator &, int kind, const char *intrinsic);
+
+template <typename TO, typename FROM>
+inline RT_API_ATTRS void PutContiguousConverted(
+ TO *to, FROM *from, std::size_t count) {
+ while (count-- > 0) {
+ *to++ = *from++;
+ }
+}
+
+static inline RT_API_ATTRS std::int64_t GetInt64(
+ const char *p, std::size_t bytes, Terminator &terminator) {
+ switch (bytes) {
+ case 1:
+ return *reinterpret_cast<const CppTypeFor<TypeCategory::Integer, 1> *>(p);
+ case 2:
+ return *reinterpret_cast<const CppTypeFor<TypeCategory::Integer, 2> *>(p);
+ case 4:
+ return *reinterpret_cast<const CppTypeFor<TypeCategory::Integer, 4> *>(p);
+ case 8:
+ return *reinterpret_cast<const CppTypeFor<TypeCategory::Integer, 8> *>(p);
+ default:
+ terminator.Crash("GetInt64: no case for %zd bytes", bytes);
+ }
+}
+
+static inline RT_API_ATTRS Fortran::common::optional<std::int64_t> GetInt64Safe(
+ const char *p, std::size_t bytes, Terminator &terminator) {
+ switch (bytes) {
+ case 1:
+ return *reinterpret_cast<const CppTypeFor<TypeCategory::Integer, 1> *>(p);
+ case 2:
+ return *reinterpret_cast<const CppTypeFor<TypeCategory::Integer, 2> *>(p);
+ case 4:
+ return *reinterpret_cast<const CppTypeFor<TypeCategory::Integer, 4> *>(p);
+ case 8:
+ return *reinterpret_cast<const CppTypeFor<TypeCategory::Integer, 8> *>(p);
+ case 16: {
+ using Int128 = CppTypeFor<TypeCategory::Integer, 16>;
+ auto n{*reinterpret_cast<const Int128 *>(p)};
+ std::int64_t result{static_cast<std::int64_t>(n)};
+ if (static_cast<Int128>(result) == n) {
+ return result;
+ }
+ return Fortran::common::nullopt;
+ }
+ default:
+ terminator.Crash("GetInt64Safe: no case for %zd bytes", bytes);
+ }
+}
+
+template <typename INT>
+inline RT_API_ATTRS bool SetInteger(INT &x, int kind, std::int64_t value) {
+ switch (kind) {
+ case 1:
+ reinterpret_cast<CppTypeFor<TypeCategory::Integer, 1> &>(x) = value;
+ return value == reinterpret_cast<CppTypeFor<TypeCategory::Integer, 1> &>(x);
+ case 2:
+ reinterpret_cast<CppTypeFor<TypeCategory::Integer, 2> &>(x) = value;
+ return value == reinterpret_cast<CppTypeFor<TypeCategory::Integer, 2> &>(x);
+ case 4:
+ reinterpret_cast<CppTypeFor<TypeCategory::Integer, 4> &>(x) = value;
+ return value == reinterpret_cast<CppTypeFor<TypeCategory::Integer, 4> &>(x);
+ case 8:
+ reinterpret_cast<CppTypeFor<TypeCategory::Integer, 8> &>(x) = value;
+ return value == reinterpret_cast<CppTypeFor<TypeCategory::Integer, 8> &>(x);
+ default:
+ return false;
+ }
+}
+
+// Maps intrinsic runtime type category and kind values to the appropriate
+// instantiation of a function object template and calls it with the supplied
+// arguments.
+template <template <TypeCategory, int> class FUNC, typename RESULT,
+ typename... A>
+inline RT_API_ATTRS RESULT ApplyType(
+ TypeCategory cat, int kind, Terminator &terminator, A &&...x) {
+ switch (cat) {
+ case TypeCategory::Integer:
+ switch (kind) {
+ case 1:
+ return FUNC<TypeCategory::Integer, 1>{}(std::forward<A>(x)...);
+ case 2:
+ return FUNC<TypeCategory::Integer, 2>{}(std::forward<A>(x)...);
+ case 4:
+ return FUNC<TypeCategory::Integer, 4>{}(std::forward<A>(x)...);
+ case 8:
+ return FUNC<TypeCategory::Integer, 8>{}(std::forward<A>(x)...);
+#if defined __SIZEOF_INT128__ && !AVOID_NATIVE_UINT128_T
+ case 16:
+ return FUNC<TypeCategory::Integer, 16>{}(std::forward<A>(x)...);
+#endif
+ default:
+ terminator.Crash("not yet implemented: INTEGER(KIND=%d)", kind);
+ }
+ case TypeCategory::Unsigned:
+ switch (kind) {
+ case 1:
+ return FUNC<TypeCategory::Unsigned, 1>{}(std::forward<A>(x)...);
+ case 2:
+ return FUNC<TypeCategory::Unsigned, 2>{}(std::forward<A>(x)...);
+ case 4:
+ return FUNC<TypeCategory::Unsigned, 4>{}(std::forward<A>(x)...);
+ case 8:
+ return FUNC<TypeCategory::Unsigned, 8>{}(std::forward<A>(x)...);
+#if defined __SIZEOF_INT128__ && !AVOID_NATIVE_UINT128_T
+ case 16:
+ return FUNC<TypeCategory::Unsigned, 16>{}(std::forward<A>(x)...);
+#endif
+ default:
+ terminator.Crash("not yet implemented: UNSIGNED(KIND=%d)", kind);
+ }
+ case TypeCategory::Real:
+ switch (kind) {
+#if 0 // TODO: REAL(2 & 3)
+ case 2:
+ return FUNC<TypeCategory::Real, 2>{}(std::forward<A>(x)...);
+ case 3:
+ return FUNC<TypeCategory::Real, 3>{}(std::forward<A>(x)...);
+#endif
+ case 4:
+ return FUNC<TypeCategory::Real, 4>{}(std::forward<A>(x)...);
+ case 8:
+ return FUNC<TypeCategory::Real, 8>{}(std::forward<A>(x)...);
+ case 10:
+ if constexpr (HasCppTypeFor<TypeCategory::Real, 10>) {
+ return FUNC<TypeCategory::Real, 10>{}(std::forward<A>(x)...);
+ }
+ break;
+ case 16:
+ if constexpr (HasCppTypeFor<TypeCategory::Real, 16>) {
+ return FUNC<TypeCategory::Real, 16>{}(std::forward<A>(x)...);
+ }
+ break;
+ }
+ terminator.Crash("not yet implemented: REAL(KIND=%d)", kind);
+ case TypeCategory::Complex:
+ switch (kind) {
+#if 0 // TODO: COMPLEX(2 & 3)
+ case 2:
+ return FUNC<TypeCategory::Complex, 2>{}(std::forward<A>(x)...);
+ case 3:
+ return FUNC<TypeCategory::Complex, 3>{}(std::forward<A>(x)...);
+#endif
+ case 4:
+ return FUNC<TypeCategory::Complex, 4>{}(std::forward<A>(x)...);
+ case 8:
+ return FUNC<TypeCategory::Complex, 8>{}(std::forward<A>(x)...);
+ case 10:
+ if constexpr (HasCppTypeFor<TypeCategory::Real, 10>) {
+ return FUNC<TypeCategory::Complex, 10>{}(std::forward<A>(x)...);
+ }
+ break;
+ case 16:
+ if constexpr (HasCppTypeFor<TypeCategory::Real, 16>) {
+ return FUNC<TypeCategory::Complex, 16>{}(std::forward<A>(x)...);
+ }
+ break;
+ }
+ terminator.Crash("not yet implemented: COMPLEX(KIND=%d)", kind);
+ case TypeCategory::Character:
+ switch (kind) {
+ case 1:
+ return FUNC<TypeCategory::Character, 1>{}(std::forward<A>(x)...);
+ case 2:
+ return FUNC<TypeCategory::Character, 2>{}(std::forward<A>(x)...);
+ case 4:
+ return FUNC<TypeCategory::Character, 4>{}(std::forward<A>(x)...);
+ default:
+ terminator.Crash("not yet implemented: CHARACTER(KIND=%d)", kind);
+ }
+ case TypeCategory::Logical:
+ switch (kind) {
+ case 1:
+ return FUNC<TypeCategory::Logical, 1>{}(std::forward<A>(x)...);
+ case 2:
+ return FUNC<TypeCategory::Logical, 2>{}(std::forward<A>(x)...);
+ case 4:
+ return FUNC<TypeCategory::Logical, 4>{}(std::forward<A>(x)...);
+ case 8:
+ return FUNC<TypeCategory::Logical, 8>{}(std::forward<A>(x)...);
+ default:
+ terminator.Crash("not yet implemented: LOGICAL(KIND=%d)", kind);
+ }
+ default:
+ terminator.Crash(
+ "not yet implemented: type category(%d)", static_cast<int>(cat));
+ }
+}
+
+// Maps a runtime INTEGER kind value to the appropriate instantiation of
+// a function object template and calls it with the supplied arguments.
+template <template <int KIND> class FUNC, typename RESULT, typename... A>
+inline RT_API_ATTRS RESULT ApplyIntegerKind(
+ int kind, Terminator &terminator, A &&...x) {
+ switch (kind) {
+ case 1:
+ return FUNC<1>{}(std::forward<A>(x)...);
+ case 2:
+ return FUNC<2>{}(std::forward<A>(x)...);
+ case 4:
+ return FUNC<4>{}(std::forward<A>(x)...);
+ case 8:
+ return FUNC<8>{}(std::forward<A>(x)...);
+#if defined __SIZEOF_INT128__ && !AVOID_NATIVE_UINT128_T
+ case 16:
+ return FUNC<16>{}(std::forward<A>(x)...);
+#endif
+ default:
+ terminator.Crash("not yet implemented: INTEGER/UNSIGNED(KIND=%d)", kind);
+ }
+}
+
+template <template <int KIND> class FUNC, typename RESULT,
+ bool NEEDSMATH = false, typename... A>
+inline RT_API_ATTRS RESULT ApplyFloatingPointKind(
+ int kind, Terminator &terminator, A &&...x) {
+ switch (kind) {
+#if 0 // TODO: REAL/COMPLEX (2 & 3)
+ case 2:
+ return FUNC<2>{}(std::forward<A>(x)...);
+ case 3:
+ return FUNC<3>{}(std::forward<A>(x)...);
+#endif
+ case 4:
+ return FUNC<4>{}(std::forward<A>(x)...);
+ case 8:
+ return FUNC<8>{}(std::forward<A>(x)...);
+ case 10:
+ if constexpr (HasCppTypeFor<TypeCategory::Real, 10>) {
+ return FUNC<10>{}(std::forward<A>(x)...);
+ }
+ break;
+ case 16:
+ if constexpr (HasCppTypeFor<TypeCategory::Real, 16>) {
+ // If FUNC implemenation relies on FP math functions,
+ // then we should not be here. The compiler should have
+ // generated a call to an entry in the libflang_rt.quadmath
+ // library.
+ if constexpr (!NEEDSMATH) {
+ return FUNC<16>{}(std::forward<A>(x)...);
+ }
+ }
+ break;
+ }
+ terminator.Crash("not yet implemented: REAL/COMPLEX(KIND=%d)", kind);
+}
+
+template <template <int KIND> class FUNC, typename RESULT, typename... A>
+inline RT_API_ATTRS RESULT ApplyCharacterKind(
+ int kind, Terminator &terminator, A &&...x) {
+ switch (kind) {
+ case 1:
+ return FUNC<1>{}(std::forward<A>(x)...);
+ case 2:
+ return FUNC<2>{}(std::forward<A>(x)...);
+ case 4:
+ return FUNC<4>{}(std::forward<A>(x)...);
+ default:
+ terminator.Crash("not yet implemented: CHARACTER(KIND=%d)", kind);
+ }
+}
+
+template <template <int KIND> class FUNC, typename RESULT, typename... A>
+inline RT_API_ATTRS RESULT ApplyLogicalKind(
+ int kind, Terminator &terminator, A &&...x) {
+ switch (kind) {
+ case 1:
+ return FUNC<1>{}(std::forward<A>(x)...);
+ case 2:
+ return FUNC<2>{}(std::forward<A>(x)...);
+ case 4:
+ return FUNC<4>{}(std::forward<A>(x)...);
+ case 8:
+ return FUNC<8>{}(std::forward<A>(x)...);
+ default:
+ terminator.Crash("not yet implemented: LOGICAL(KIND=%d)", kind);
+ }
+}
+
+// Calculate result type of (X op Y) for *, //, DOT_PRODUCT, &c.
+Fortran::common::optional<
+ std::pair<TypeCategory, int>> inline constexpr RT_API_ATTRS
+GetResultType(TypeCategory xCat, int xKind, TypeCategory yCat, int yKind) {
+ int maxKind{std::max(xKind, yKind)};
+ switch (xCat) {
+ case TypeCategory::Integer:
+ switch (yCat) {
+ case TypeCategory::Integer:
+ return std::make_pair(TypeCategory::Integer, maxKind);
+ case TypeCategory::Real:
+ case TypeCategory::Complex:
+#if !(defined __SIZEOF_INT128__ && !AVOID_NATIVE_UINT128_T)
+ if (xKind == 16) {
+ break;
+ }
+#endif
+ return std::make_pair(yCat, yKind);
+ default:
+ break;
+ }
+ break;
+ case TypeCategory::Unsigned:
+ switch (yCat) {
+ case TypeCategory::Unsigned:
+ return std::make_pair(TypeCategory::Unsigned, maxKind);
+ case TypeCategory::Real:
+ case TypeCategory::Complex:
+#if !(defined __SIZEOF_INT128__ && !AVOID_NATIVE_UINT128_T)
+ if (xKind == 16) {
+ break;
+ }
+#endif
+ return std::make_pair(yCat, yKind);
+ default:
+ break;
+ }
+ break;
+ case TypeCategory::Real:
+ switch (yCat) {
+ case TypeCategory::Integer:
+ case TypeCategory::Unsigned:
+#if !(defined __SIZEOF_INT128__ && !AVOID_NATIVE_UINT128_T)
+ if (yKind == 16) {
+ break;
+ }
+#endif
+ return std::make_pair(TypeCategory::Real, xKind);
+ case TypeCategory::Real:
+ case TypeCategory::Complex:
+ return std::make_pair(yCat, maxKind);
+ default:
+ break;
+ }
+ break;
+ case TypeCategory::Complex:
+ switch (yCat) {
+ case TypeCategory::Integer:
+ case TypeCategory::Unsigned:
+#if !(defined __SIZEOF_INT128__ && !AVOID_NATIVE_UINT128_T)
+ if (yKind == 16) {
+ break;
+ }
+#endif
+ return std::make_pair(TypeCategory::Complex, xKind);
+ case TypeCategory::Real:
+ case TypeCategory::Complex:
+ return std::make_pair(TypeCategory::Complex, maxKind);
+ default:
+ break;
+ }
+ break;
+ case TypeCategory::Character:
+ if (yCat == TypeCategory::Character) {
+ return std::make_pair(TypeCategory::Character, maxKind);
+ } else {
+ return Fortran::common::nullopt;
+ }
+ case TypeCategory::Logical:
+ if (yCat == TypeCategory::Logical) {
+ return std::make_pair(TypeCategory::Logical, maxKind);
+ } else {
+ return Fortran::common::nullopt;
+ }
+ default:
+ break;
+ }
+ return Fortran::common::nullopt;
+}
+
+// Accumulate floating-point results in (at least) double precision
+template <TypeCategory CAT, int KIND>
+using AccumulationType = CppTypeFor<CAT,
+ CAT == TypeCategory::Real || CAT == TypeCategory::Complex
+ ? std::max(KIND, static_cast<int>(sizeof(double)))
+ : KIND>;
+
+// memchr() for any character type
+template <typename CHAR>
+static inline RT_API_ATTRS const CHAR *FindCharacter(
+ const CHAR *data, CHAR ch, std::size_t chars) {
+ const CHAR *end{data + chars};
+ for (const CHAR *p{data}; p < end; ++p) {
+ if (*p == ch) {
+ return p;
+ }
+ }
+ return nullptr;
+}
+
+template <>
+inline RT_API_ATTRS const char *FindCharacter(
+ const char *data, char ch, std::size_t chars) {
+ return reinterpret_cast<const char *>(
+ runtime::memchr(data, static_cast<int>(ch), chars));
+}
+
+// Copy payload data from one allocated descriptor to another.
+// Assumes element counts and element sizes match, and that both
+// descriptors are allocated.
+template <typename P = char, int RANK = -1>
+RT_API_ATTRS void ShallowCopyDiscontiguousToDiscontiguous(
+ const Descriptor &to, const Descriptor &from);
+template <typename P = char, int RANK = -1>
+RT_API_ATTRS void ShallowCopyDiscontiguousToContiguous(
+ const Descriptor &to, const Descriptor &from);
+template <typename P = char, int RANK = -1>
+RT_API_ATTRS void ShallowCopyContiguousToDiscontiguous(
+ const Descriptor &to, const Descriptor &from);
+RT_API_ATTRS void ShallowCopy(const Descriptor &to, const Descriptor &from,
+ bool toIsContiguous, bool fromIsContiguous);
+RT_API_ATTRS void ShallowCopy(const Descriptor &to, const Descriptor &from);
+
+// Ensures that a character string is null-terminated, allocating a /p length +1
+// size memory for null-terminator if necessary. Returns the original or a newly
+// allocated null-terminated string (responsibility for deallocation is on the
+// caller).
+RT_API_ATTRS char *EnsureNullTerminated(
+ char *str, std::size_t length, Terminator &terminator);
+
+RT_API_ATTRS bool IsValidCharDescriptor(const Descriptor *value);
+
+RT_API_ATTRS bool IsValidIntDescriptor(const Descriptor *intVal);
+
+// Copy a null-terminated character array \p rawValue to descriptor \p value.
+// The copy starts at the given \p offset, if not present then start at 0.
+// If descriptor `errmsg` is provided, error messages will be stored to it.
+// Returns stats specified in standard.
+RT_API_ATTRS std::int32_t CopyCharsToDescriptor(const Descriptor &value,
+ const char *rawValue, std::size_t rawValueLength,
+ const Descriptor *errmsg = nullptr, std::size_t offset = 0);
+
+RT_API_ATTRS void StoreIntToDescriptor(
+ const Descriptor *length, std::int64_t value, Terminator &terminator);
+
+// Defines a utility function for copying and padding characters
+template <typename TO, typename FROM>
+RT_API_ATTRS void CopyAndPad(
+ TO *to, const FROM *from, std::size_t toChars, std::size_t fromChars) {
+ if constexpr (sizeof(TO) != sizeof(FROM)) {
+ std::size_t copyChars{std::min(toChars, fromChars)};
+ for (std::size_t j{0}; j < copyChars; ++j) {
+ to[j] = from[j];
+ }
+ for (std::size_t j{copyChars}; j < toChars; ++j) {
+ to[j] = static_cast<TO>(' ');
+ }
+ } else if (toChars <= fromChars) {
+ std::memcpy(to, from, toChars * sizeof(TO));
+ } else {
+ std::memcpy(to, from, std::min(toChars, fromChars) * sizeof(TO));
+ for (std::size_t j{fromChars}; j < toChars; ++j) {
+ to[j] = static_cast<TO>(' ');
+ }
+ }
+}
+
+RT_API_ATTRS void CreatePartialReductionResult(Descriptor &result,
+ const Descriptor &x, std::size_t resultElementSize, int dim, Terminator &,
+ const char *intrinsic, TypeCode);
+
+} // namespace Fortran::runtime
+#endif // FLANG_RT_RUNTIME_TOOLS_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/type-code.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/type-code.h
new file mode 100644
index 00000000000..9416a2816fd
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/type-code.h
@@ -0,0 +1,78 @@
+//===-- include/flang-rt/runtime/type-code.h --------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FLANG_RT_RUNTIME_TYPE_CODE_H_
+#define FLANG_RT_RUNTIME_TYPE_CODE_H_
+
+#include "flang/Common/Fortran-consts.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
+#include "flang/Common/optional.h"
+#include <utility>
+
+namespace Fortran::runtime {
+
+using common::TypeCategory;
+
+class TypeCode {
+public:
+ TypeCode() {}
+ explicit RT_API_ATTRS TypeCode(ISO::CFI_type_t t) : raw_{t} {}
+ RT_API_ATTRS TypeCode(TypeCategory, int kind);
+
+ RT_API_ATTRS int raw() const { return raw_; }
+
+ constexpr RT_API_ATTRS bool IsValid() const {
+ return raw_ >= CFI_type_signed_char && raw_ <= CFI_TYPE_LAST;
+ }
+ constexpr RT_API_ATTRS bool IsInteger() const {
+ return raw_ >= CFI_type_signed_char && raw_ <= CFI_type_ptrdiff_t;
+ }
+ constexpr RT_API_ATTRS bool IsReal() const {
+ return raw_ >= CFI_type_half_float && raw_ <= CFI_type_float128;
+ }
+ constexpr RT_API_ATTRS bool IsComplex() const {
+ return raw_ >= CFI_type_half_float_Complex &&
+ raw_ <= CFI_type_float128_Complex;
+ }
+ constexpr RT_API_ATTRS bool IsCharacter() const {
+ return raw_ == CFI_type_char || raw_ == CFI_type_char16_t ||
+ raw_ == CFI_type_char32_t;
+ }
+ constexpr RT_API_ATTRS bool IsLogical() const {
+ return raw_ == CFI_type_Bool ||
+ (raw_ >= CFI_type_int_least8_t && raw_ <= CFI_type_int_least64_t);
+ }
+ constexpr RT_API_ATTRS bool IsDerived() const {
+ return raw_ == CFI_type_struct;
+ }
+ constexpr RT_API_ATTRS bool IsIntrinsic() const {
+ return IsValid() && !IsDerived();
+ }
+
+ RT_API_ATTRS Fortran::common::optional<std::pair<TypeCategory, int>>
+ GetCategoryAndKind() const;
+
+ RT_API_ATTRS bool operator==(TypeCode that) const {
+ if (raw_ == that.raw_) { // fast path
+ return true;
+ } else {
+ // Multiple raw CFI_type_... codes can represent the same Fortran
+ // type category + kind type parameter, e.g. CFI_type_int and
+ // CFI_type_int32_t.
+ auto thisCK{GetCategoryAndKind()};
+ auto thatCK{that.GetCategoryAndKind()};
+ return thisCK && thatCK && *thisCK == *thatCK;
+ }
+ }
+ RT_API_ATTRS bool operator!=(TypeCode that) const { return !(*this == that); }
+
+private:
+ ISO::CFI_type_t raw_{CFI_type_other};
+};
+} // namespace Fortran::runtime
+#endif // FLANG_RT_RUNTIME_TYPE_CODE_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/type-info.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/type-info.h
new file mode 100644
index 00000000000..a8d39f4f8a1
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/type-info.h
@@ -0,0 +1,339 @@
+//===-- include/flang-rt/runtime/type-info.h --------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FLANG_RT_RUNTIME_TYPE_INFO_H_
+#define FLANG_RT_RUNTIME_TYPE_INFO_H_
+
+// A C++ perspective of the derived type description schemata in
+// flang/module/__fortran_type_info.f90.
+
+#include "descriptor.h"
+#include "terminator.h"
+#include "flang/Common/Fortran-consts.h"
+#include "flang/Common/bit-population-count.h"
+#include "flang/Common/optional.h"
+#include <cinttypes>
+#include <memory>
+
+namespace Fortran::runtime::typeInfo {
+
+class DerivedType;
+
+using ProcedurePointer = void (*)(); // TYPE(C_FUNPTR)
+
+struct Binding {
+ ProcedurePointer proc;
+ StaticDescriptor<0> name; // CHARACTER(:), POINTER
+};
+
+class Value {
+public:
+ enum class Genre : std::uint8_t {
+ Deferred = 1,
+ Explicit = 2,
+ LenParameter = 3
+ };
+ RT_API_ATTRS Genre genre() const { return genre_; }
+ RT_API_ATTRS Fortran::common::optional<TypeParameterValue> GetValue(
+ const Descriptor *) const;
+
+private:
+ Genre genre_{Genre::Explicit};
+ // The value encodes an index into the table of LEN type parameters in
+ // a descriptor's addendum for genre == Genre::LenParameter.
+ TypeParameterValue value_{0};
+};
+
+class Component {
+public:
+ enum class Genre : std::uint8_t {
+ Data = 1,
+ Pointer = 2,
+ Allocatable = 3,
+ Automatic = 4
+ };
+
+ RT_API_ATTRS const Descriptor &name() const { return name_.descriptor(); }
+ RT_API_ATTRS Genre genre() const { return genre_; }
+ RT_API_ATTRS TypeCategory category() const {
+ return static_cast<TypeCategory>(category_);
+ }
+ RT_API_ATTRS int kind() const { return kind_; }
+ RT_API_ATTRS int rank() const { return rank_; }
+ RT_API_ATTRS std::uint64_t offset() const { return offset_; }
+ RT_API_ATTRS const Value &characterLen() const { return characterLen_; }
+ RT_API_ATTRS const DerivedType *derivedType() const {
+ return category() == TypeCategory::Derived
+ ? derivedType_.descriptor().OffsetElement<const DerivedType>()
+ : nullptr;
+ }
+ RT_API_ATTRS const Value *lenValue() const {
+ return lenValue_.descriptor().OffsetElement<const Value>();
+ }
+ RT_API_ATTRS const Value *bounds() const {
+ return bounds_.descriptor().OffsetElement<const Value>();
+ }
+ RT_API_ATTRS const char *initialization() const { return initialization_; }
+
+ RT_API_ATTRS std::size_t GetElementByteSize(const Descriptor &) const;
+ RT_API_ATTRS std::size_t GetElements(const Descriptor &) const;
+
+ // For components that are descriptors, returns size of descriptor;
+ // for Genre::Data, returns elemental byte size times element count.
+ RT_API_ATTRS std::size_t SizeInBytes(const Descriptor &) const;
+
+ // Establishes a descriptor from this component description.
+ RT_API_ATTRS void EstablishDescriptor(
+ Descriptor &, const Descriptor &container, Terminator &) const;
+
+ // Creates a pointer descriptor from this component description, possibly
+ // with subscripts
+ RT_API_ATTRS void CreatePointerDescriptor(Descriptor &,
+ const Descriptor &container, Terminator &,
+ const SubscriptValue * = nullptr) const;
+
+ FILE *Dump(FILE * = stdout) const;
+
+private:
+ StaticDescriptor<0> name_; // CHARACTER(:), POINTER
+ Genre genre_{Genre::Data};
+ std::uint8_t category_; // common::TypeCategory
+ std::uint8_t kind_{0};
+ std::uint8_t rank_{0};
+ std::uint64_t offset_{0};
+ Value characterLen_; // for TypeCategory::Character
+ StaticDescriptor<0, true> derivedType_; // TYPE(DERIVEDTYPE), POINTER
+ StaticDescriptor<1, true>
+ lenValue_; // TYPE(VALUE), POINTER, DIMENSION(:), CONTIGUOUS
+ StaticDescriptor<2, true>
+ bounds_; // TYPE(VALUE), POINTER, DIMENSION(2,:), CONTIGUOUS
+ const char *initialization_{nullptr}; // for Genre::Data and Pointer
+ // TODO: cobounds
+ // TODO: `PRIVATE` attribute
+};
+
+struct ProcPtrComponent {
+ StaticDescriptor<0> name; // CHARACTER(:), POINTER
+ std::uint64_t offset{0};
+ ProcedurePointer procInitialization;
+};
+
+class SpecialBinding {
+public:
+ enum class Which : std::uint8_t {
+ None = 0,
+ ScalarAssignment = 1,
+ ElementalAssignment = 2,
+ ReadFormatted = 3,
+ ReadUnformatted = 4,
+ WriteFormatted = 5,
+ WriteUnformatted = 6,
+ ElementalFinal = 7,
+ AssumedRankFinal = 8,
+ ScalarFinal = 9,
+ // higher-ranked final procedures follow
+ };
+
+ // Special bindings can be created during execution to handle defined
+ // I/O procedures that are not type-bound.
+ RT_API_ATTRS SpecialBinding(Which which, ProcedurePointer proc,
+ std::uint8_t isArgDescSet, std::uint8_t isTypeBound,
+ std::uint8_t isArgContiguousSet)
+ : which_{which}, isArgDescriptorSet_{isArgDescSet},
+ isTypeBound_{isTypeBound}, isArgContiguousSet_{isArgContiguousSet},
+ proc_{proc} {}
+
+ static constexpr RT_API_ATTRS Which RankFinal(int rank) {
+ return static_cast<Which>(static_cast<int>(Which::ScalarFinal) + rank);
+ }
+
+ RT_API_ATTRS Which which() const { return which_; }
+ RT_API_ATTRS bool IsArgDescriptor(int zeroBasedArg) const {
+ return (isArgDescriptorSet_ >> zeroBasedArg) & 1;
+ }
+ RT_API_ATTRS bool IsTypeBound() const { return isTypeBound_ != 0; }
+ RT_API_ATTRS bool IsArgContiguous(int zeroBasedArg) const {
+ return (isArgContiguousSet_ >> zeroBasedArg) & 1;
+ }
+ template <typename PROC>
+ RT_API_ATTRS PROC GetProc(const Binding *bindings = nullptr) const {
+ if (bindings && isTypeBound_ > 0) {
+ return reinterpret_cast<PROC>(bindings[isTypeBound_ - 1].proc);
+ } else {
+ return reinterpret_cast<PROC>(proc_);
+ }
+ }
+
+ FILE *Dump(FILE *) const;
+
+private:
+ Which which_{Which::None};
+
+ // The following little bit-set identifies which dummy arguments are
+ // passed via descriptors for their derived type arguments.
+ // Which::Assignment and Which::ElementalAssignment:
+ // Set to 1, 2, or (usually 3).
+ // The passed-object argument (usually the "to") is always passed via a
+ // a descriptor in the cases where the runtime will call a defined
+ // assignment because these calls are to type-bound generics,
+ // not generic interfaces, and type-bound generic defined assigment
+ // may appear only in an extensible type and requires a passed-object
+ // argument (see C774), and passed-object arguments to TBPs must be
+ // both polymorphic and scalar (C760). The non-passed-object argument
+ // (usually the "from") is usually, but not always, also a descriptor.
+ // Which::Final and Which::ElementalFinal:
+ // Set to 1 when dummy argument is assumed-shape; otherwise, the
+ // argument can be passed by address. (Fortran guarantees that
+ // any finalized object must be whole and contiguous by restricting
+ // the use of DEALLOCATE on pointers. The dummy argument of an
+ // elemental final subroutine must be scalar and monomorphic, but
+ // use a descriptors when the type has LEN parameters.)
+ // Which::AssumedRankFinal: flag must necessarily be set
+ // Defined I/O:
+ // Set to 1 when "dtv" initial dummy argument is polymorphic, which is
+ // the case when and only when the derived type is extensible.
+ // When false, the defined I/O subroutine must have been
+ // called via a generic interface, not a generic TBP.
+ std::uint8_t isArgDescriptorSet_{0};
+ // When a special binding is type-bound, this is its binding's index (plus 1,
+ // so that 0 signifies that it's not type-bound).
+ std::uint8_t isTypeBound_{0};
+ // True when a FINAL subroutine has a dummy argument that is an array that
+ // is CONTIGUOUS or neither assumed-rank nor assumed-shape.
+ std::uint8_t isArgContiguousSet_{0};
+
+ ProcedurePointer proc_{nullptr};
+};
+
+class DerivedType {
+public:
+ ~DerivedType(); // never defined
+
+ RT_API_ATTRS const Descriptor &binding() const {
+ return binding_.descriptor();
+ }
+ RT_API_ATTRS const Descriptor &name() const { return name_.descriptor(); }
+ RT_API_ATTRS std::uint64_t sizeInBytes() const { return sizeInBytes_; }
+ RT_API_ATTRS const Descriptor &uninstantiated() const {
+ return uninstantiated_.descriptor();
+ }
+ RT_API_ATTRS const DerivedType *uninstantiatedType() const {
+ return reinterpret_cast<const DerivedType *>(
+ uninstantiated().raw().base_addr);
+ }
+ RT_API_ATTRS const Descriptor &kindParameter() const {
+ return kindParameter_.descriptor();
+ }
+ RT_API_ATTRS const Descriptor &lenParameterKind() const {
+ return lenParameterKind_.descriptor();
+ }
+ RT_API_ATTRS const Descriptor &component() const {
+ return component_.descriptor();
+ }
+ RT_API_ATTRS const Descriptor &procPtr() const {
+ return procPtr_.descriptor();
+ }
+ RT_API_ATTRS const Descriptor &special() const {
+ return special_.descriptor();
+ }
+ RT_API_ATTRS bool hasParent() const { return hasParent_; }
+ RT_API_ATTRS bool noInitializationNeeded() const {
+ return noInitializationNeeded_;
+ }
+ RT_API_ATTRS bool noDestructionNeeded() const { return noDestructionNeeded_; }
+ RT_API_ATTRS bool noFinalizationNeeded() const {
+ return noFinalizationNeeded_;
+ }
+ RT_API_ATTRS bool noDefinedAssignment() const { return noDefinedAssignment_; }
+
+ RT_API_ATTRS std::size_t LenParameters() const {
+ return lenParameterKind().Elements();
+ }
+
+ RT_API_ATTRS const DerivedType *GetParentType() const;
+
+ // Finds a data component by name in this derived type or its ancestors.
+ RT_API_ATTRS const Component *FindDataComponent(
+ const char *name, std::size_t nameLen) const;
+
+ // O(1) look-up of special procedure bindings
+ RT_API_ATTRS const SpecialBinding *FindSpecialBinding(
+ SpecialBinding::Which which) const {
+ auto bitIndex{static_cast<std::uint32_t>(which)};
+ auto bit{std::uint32_t{1} << bitIndex};
+ if (specialBitSet_ & bit) {
+ // The index of this special procedure in the sorted array is the
+ // number of special bindings that are present with smaller "which"
+ // code values.
+ int offset{common::BitPopulationCount(specialBitSet_ & (bit - 1))};
+ const auto *binding{
+ special_.descriptor().ZeroBasedIndexedElement<SpecialBinding>(
+ offset)};
+ INTERNAL_CHECK(binding && binding->which() == which);
+ return binding;
+ } else {
+ return nullptr;
+ }
+ }
+
+ FILE *Dump(FILE * = stdout) const;
+
+private:
+ // This member comes first because it's used like a vtable by generated code.
+ // It includes all of the ancestor types' bindings, if any, first,
+ // with any overrides from descendants already applied to them. Local
+ // bindings then follow in alphabetic order of binding name.
+ StaticDescriptor<1, true>
+ binding_; // TYPE(BINDING), DIMENSION(:), POINTER, CONTIGUOUS
+
+ StaticDescriptor<0> name_; // CHARACTER(:), POINTER
+
+ std::uint64_t sizeInBytes_{0};
+
+ // Instantiations of a parameterized derived type with KIND type
+ // parameters will point this data member to the description of
+ // the original uninstantiated type, which may be shared from a
+ // module via use association. The original uninstantiated derived
+ // type description will point to itself. Derived types that have
+ // no KIND type parameters will have a null pointer here.
+ StaticDescriptor<0, true> uninstantiated_; // TYPE(DERIVEDTYPE), POINTER
+
+ // These pointer targets include all of the items from the parent, if any.
+ StaticDescriptor<1> kindParameter_; // pointer to rank-1 array of INTEGER(8)
+ StaticDescriptor<1>
+ lenParameterKind_; // pointer to rank-1 array of INTEGER(1)
+
+ // This array of local data components includes the parent component.
+ // Components are in component order, not collation order of their names.
+ // It does not include procedure pointer components.
+ StaticDescriptor<1, true>
+ component_; // TYPE(COMPONENT), POINTER, DIMENSION(:), CONTIGUOUS
+
+ // Procedure pointer components
+ StaticDescriptor<1, true>
+ procPtr_; // TYPE(PROCPTR), POINTER, DIMENSION(:), CONTIGUOUS
+
+ // Packed in ascending order of "which" code values.
+ // Does not include special bindings from ancestral types.
+ StaticDescriptor<1, true>
+ special_; // TYPE(SPECIALBINDING), POINTER, DIMENSION(:), CONTIGUOUS
+
+ // Little-endian bit-set of special procedure binding "which" code values
+ // for O(1) look-up in FindSpecialBinding() above.
+ std::uint32_t specialBitSet_{0};
+
+ // Flags
+ bool hasParent_{false};
+ bool noInitializationNeeded_{false};
+ bool noDestructionNeeded_{false};
+ bool noFinalizationNeeded_{false};
+ bool noDefinedAssignment_{false};
+};
+
+} // namespace Fortran::runtime::typeInfo
+#endif // FLANG_RT_RUNTIME_TYPE_INFO_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/utf.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/utf.h
new file mode 100644
index 00000000000..b5add823124
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/utf.h
@@ -0,0 +1,73 @@
+//===-- include/flang-rt/runtime/utf.h --------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// UTF-8 is the variant-width standard encoding of Unicode (ISO 10646)
+// code points.
+//
+// 7-bit values in [00 .. 7F] represent themselves as single bytes, so true
+// 7-bit ASCII is also valid UTF-8.
+//
+// Larger values are encoded with a start byte in [C0 .. FE] that carries
+// the length of the encoding and some of the upper bits of the value, followed
+// by one or more bytes in the range [80 .. BF].
+//
+// Specifically, the first byte holds two or more uppermost set bits,
+// a zero bit, and some payload; the second and later bytes each start with
+// their uppermost bit set, the next bit clear, and six bits of payload.
+// Payload parcels are in big-endian order. All bytes must be present in a
+// valid sequence; i.e., low-order sezo bits must be explicit. UTF-8 is
+// self-synchronizing on input as any byte value cannot be both a valid
+// first byte or trailing byte.
+//
+// 0xxxxxxx - 7 bit ASCII
+// 110xxxxx 10xxxxxx - 11-bit value
+// 1110xxxx 10xxxxxx 10xxxxxx - 16-bit value
+// 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - 21-bit value
+// 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - 26-bit value
+// 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - 31-bit value
+// 11111110 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - 36-bit value
+//
+// Canonical UTF-8 sequences should be minimal, and our output is so, but
+// we do not reject non-minimal sequences on input. Unicode only defines
+// code points up to 0x10FFFF, so 21-bit (4-byte) UTF-8 is the actual
+// standard maximum. However, we support extended forms up to 32 bits so that
+// CHARACTER(KIND=4) can be abused to hold arbitrary 32-bit data.
+
+#ifndef FLANG_RT_RUNTIME_UTF_H_
+#define FLANG_RT_RUNTIME_UTF_H_
+
+#include "flang/Common/optional.h"
+#include <cstddef>
+#include <cstdint>
+
+namespace Fortran::runtime {
+
+// Derive the length of a UTF-8 character encoding from its first byte.
+// A zero result signifies an invalid encoding.
+RT_OFFLOAD_VAR_GROUP_BEGIN
+extern const RT_CONST_VAR_ATTRS std::uint8_t UTF8FirstByteTable[256];
+static constexpr std::size_t maxUTF8Bytes{7};
+RT_OFFLOAD_VAR_GROUP_END
+
+static inline RT_API_ATTRS std::size_t MeasureUTF8Bytes(char first) {
+ return UTF8FirstByteTable[static_cast<std::uint8_t>(first)];
+}
+
+RT_API_ATTRS std::size_t MeasurePreviousUTF8Bytes(
+ const char *end, std::size_t limit);
+
+// Ensure that all bytes are present in sequence in the input buffer
+// before calling; use MeasureUTF8Bytes(first byte) to count them.
+RT_API_ATTRS Fortran::common::optional<char32_t> DecodeUTF8(const char *);
+
+// Ensure that at least maxUTF8Bytes remain in the output
+// buffer before calling.
+RT_API_ATTRS std::size_t EncodeUTF8(char *, char32_t);
+
+} // namespace Fortran::runtime
+#endif // FLANG_RT_RUNTIME_UTF_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/work-queue.h b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/work-queue.h
new file mode 100644
index 00000000000..7d7f8ad991a
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/include/flang-rt/runtime/work-queue.h
@@ -0,0 +1,578 @@
+//===-- include/flang-rt/runtime/work-queue.h -------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Internal runtime utilities for work queues that replace the use of recursion
+// for better GPU device support.
+//
+// A work queue comprises a list of tickets. Each ticket class has a Begin()
+// member function, which is called once, and a Continue() member function
+// that can be called zero or more times. A ticket's execution terminates
+// when either of these member functions returns a status other than
+// StatContinue. When that status is not StatOk, then the whole queue
+// is shut down.
+//
+// By returning StatContinue from its Continue() member function,
+// a ticket suspends its execution so that any nested tickets that it
+// may have created can be run to completion. It is the reponsibility
+// of each ticket class to maintain resumption information in its state
+// and manage its own progress. Most ticket classes inherit from
+// class ComponentsOverElements, which implements an outer loop over all
+// components of a derived type, and an inner loop over all elements
+// of a descriptor, possibly with multiple phases of execution per element.
+//
+// Tickets are created by WorkQueue::Begin...() member functions.
+// There is one of these for each "top level" recursive function in the
+// Fortran runtime support library that has been restructured into this
+// ticket framework.
+//
+// When the work queue is running tickets, it always selects the last ticket
+// on the list for execution -- "work stack" might have been a more accurate
+// name for this framework. This ticket may, while doing its job, create
+// new tickets, and since those are pushed after the active one, the first
+// such nested ticket will be the next one executed to completion -- i.e.,
+// the order of nested WorkQueue::Begin...() calls is respected.
+// Note that a ticket's Continue() member function won't be called again
+// until all nested tickets have run to completion and it is once again
+// the last ticket on the queue.
+//
+// Example for an assignment to a derived type:
+// 1. Assign() is called, and its work queue is created. It calls
+// WorkQueue::BeginAssign() and then WorkQueue::Run().
+// 2. Run calls AssignTicket::Begin(), which pushes a tickets via
+// BeginFinalize() and returns StatContinue.
+// 3. FinalizeTicket::Begin() and FinalizeTicket::Continue() are called
+// until one of them returns StatOk, which ends the finalization ticket.
+// 4. AssignTicket::Continue() is then called; it creates a DerivedAssignTicket
+// and then returns StatOk, which ends the ticket.
+// 5. At this point, only one ticket remains. DerivedAssignTicket::Begin()
+// and ::Continue() are called until they are done (not StatContinue).
+// Along the way, it may create nested AssignTickets for components,
+// and suspend itself so that they may each run to completion.
+
+#ifndef FLANG_RT_RUNTIME_WORK_QUEUE_H_
+#define FLANG_RT_RUNTIME_WORK_QUEUE_H_
+
+#include "flang-rt/runtime/connection.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/stat.h"
+#include "flang-rt/runtime/type-info.h"
+#include "flang/Common/api-attrs.h"
+#include "flang/Common/optional.h"
+#include "flang/Runtime/freestanding-tools.h"
+#include <flang/Common/variant.h>
+
+namespace Fortran::runtime::io {
+class IoStatementState;
+struct NonTbpDefinedIoTable;
+} // namespace Fortran::runtime::io
+
+namespace Fortran::runtime {
+class Terminator;
+class WorkQueue;
+
+RT_OFFLOAD_API_GROUP_BEGIN
+
+// Ticket worker base classes
+
+template <typename TICKET> class ImmediateTicketRunner {
+public:
+ RT_API_ATTRS explicit ImmediateTicketRunner(TICKET &ticket)
+ : ticket_{ticket} {}
+ RT_API_ATTRS int Run(WorkQueue &workQueue) {
+ int status{ticket_.Begin(workQueue)};
+ while (status == StatContinue) {
+ status = ticket_.Continue(workQueue);
+ }
+ return status;
+ }
+
+private:
+ TICKET &ticket_;
+};
+
+// Base class for ticket workers that operate elementwise over descriptors
+class Elementwise {
+public:
+ RT_API_ATTRS Elementwise(
+ const Descriptor &instance, const Descriptor *from = nullptr)
+ : instance_{instance}, from_{from} {
+ instance_.GetLowerBounds(subscripts_);
+ if (from_) {
+ from_->GetLowerBounds(fromSubscripts_);
+ }
+ }
+ RT_API_ATTRS bool IsComplete() const { return elementAt_ >= elements_; }
+ RT_API_ATTRS void Advance() {
+ ++elementAt_;
+ instance_.IncrementSubscripts(subscripts_);
+ if (from_) {
+ from_->IncrementSubscripts(fromSubscripts_);
+ }
+ }
+ RT_API_ATTRS void SkipToEnd() { elementAt_ = elements_; }
+ RT_API_ATTRS void Reset() {
+ elementAt_ = 0;
+ instance_.GetLowerBounds(subscripts_);
+ if (from_) {
+ from_->GetLowerBounds(fromSubscripts_);
+ }
+ }
+
+protected:
+ const Descriptor &instance_, *from_{nullptr};
+ std::size_t elements_{instance_.InlineElements()};
+ std::size_t elementAt_{0};
+ SubscriptValue subscripts_[common::maxRank];
+ SubscriptValue fromSubscripts_[common::maxRank];
+};
+
+// Base class for ticket workers that operate over derived type components.
+class Componentwise {
+public:
+ RT_API_ATTRS Componentwise(const typeInfo::DerivedType &derived)
+ : derived_{derived}, components_{derived_.component().InlineElements()} {
+ GetFirstComponent();
+ }
+
+ RT_API_ATTRS bool IsComplete() const { return componentAt_ >= components_; }
+ RT_API_ATTRS void Advance() {
+ ++componentAt_;
+ if (IsComplete()) {
+ component_ = nullptr;
+ } else {
+ ++component_;
+ }
+ }
+ RT_API_ATTRS void SkipToEnd() {
+ component_ = nullptr;
+ componentAt_ = components_;
+ }
+ RT_API_ATTRS void Reset() {
+ component_ = nullptr;
+ componentAt_ = 0;
+ GetFirstComponent();
+ }
+
+protected:
+ const typeInfo::DerivedType &derived_;
+ std::size_t components_{0}, componentAt_{0};
+ const typeInfo::Component *component_{nullptr};
+ StaticDescriptor<common::maxRank, true, 0> componentDescriptor_;
+
+private:
+ RT_API_ATTRS void GetFirstComponent() {
+ if (components_ > 0) {
+ component_ = derived_.component().OffsetElement<typeInfo::Component>();
+ }
+ }
+};
+
+// Base class for ticket workers that operate over derived type components
+// in an outer loop, and elements in an inner loop.
+class ComponentsOverElements : public Componentwise, public Elementwise {
+public:
+ RT_API_ATTRS ComponentsOverElements(const Descriptor &instance,
+ const typeInfo::DerivedType &derived, const Descriptor *from = nullptr)
+ : Componentwise{derived}, Elementwise{instance, from} {
+ if (Elementwise::IsComplete()) {
+ Componentwise::SkipToEnd();
+ }
+ }
+ RT_API_ATTRS bool IsComplete() const { return Componentwise::IsComplete(); }
+ RT_API_ATTRS void Advance() {
+ SkipToNextElement();
+ if (Elementwise::IsComplete()) {
+ Elementwise::Reset();
+ Componentwise::Advance();
+ }
+ }
+ RT_API_ATTRS void SkipToNextElement() {
+ phase_ = 0;
+ Elementwise::Advance();
+ }
+ RT_API_ATTRS void SkipToNextComponent() {
+ phase_ = 0;
+ Elementwise::Reset();
+ Componentwise::Advance();
+ }
+ RT_API_ATTRS void Reset() {
+ phase_ = 0;
+ Elementwise::Reset();
+ Componentwise::Reset();
+ }
+
+protected:
+ int phase_{0};
+};
+
+// Base class for ticket workers that operate over elements in an outer loop,
+// type components in an inner loop.
+class ElementsOverComponents : public Elementwise, public Componentwise {
+public:
+ RT_API_ATTRS ElementsOverComponents(const Descriptor &instance,
+ const typeInfo::DerivedType &derived, const Descriptor *from = nullptr)
+ : Elementwise{instance, from}, Componentwise{derived} {
+ if (Componentwise::IsComplete()) {
+ Elementwise::SkipToEnd();
+ }
+ }
+ RT_API_ATTRS bool IsComplete() const { return Elementwise::IsComplete(); }
+ RT_API_ATTRS void Advance() {
+ SkipToNextComponent();
+ if (Componentwise::IsComplete()) {
+ Componentwise::Reset();
+ Elementwise::Advance();
+ }
+ }
+ RT_API_ATTRS void SkipToNextComponent() {
+ phase_ = 0;
+ Componentwise::Advance();
+ }
+ RT_API_ATTRS void SkipToNextElement() {
+ phase_ = 0;
+ Componentwise::Reset();
+ Elementwise::Advance();
+ }
+
+protected:
+ int phase_{0};
+};
+
+// Ticket worker classes
+
+// Implements derived type instance initialization.
+class InitializeTicket : public ImmediateTicketRunner<InitializeTicket>,
+ private ElementsOverComponents {
+public:
+ RT_API_ATTRS InitializeTicket(
+ const Descriptor &instance, const typeInfo::DerivedType &derived)
+ : ImmediateTicketRunner<InitializeTicket>{*this},
+ ElementsOverComponents{instance, derived} {}
+ RT_API_ATTRS int Begin(WorkQueue &);
+ RT_API_ATTRS int Continue(WorkQueue &);
+};
+
+// Initializes one derived type instance from the value of another
+class InitializeCloneTicket
+ : public ImmediateTicketRunner<InitializeCloneTicket>,
+ private ComponentsOverElements {
+public:
+ RT_API_ATTRS InitializeCloneTicket(const Descriptor &clone,
+ const Descriptor &original, const typeInfo::DerivedType &derived,
+ bool hasStat, const Descriptor *errMsg)
+ : ImmediateTicketRunner<InitializeCloneTicket>{*this},
+ ComponentsOverElements{original, derived}, clone_{clone},
+ hasStat_{hasStat}, errMsg_{errMsg} {}
+ RT_API_ATTRS int Begin(WorkQueue &) { return StatContinue; }
+ RT_API_ATTRS int Continue(WorkQueue &);
+
+private:
+ const Descriptor &clone_;
+ bool hasStat_{false};
+ const Descriptor *errMsg_{nullptr};
+ StaticDescriptor<common::maxRank, true, 0> cloneComponentDescriptor_;
+};
+
+// Implements derived type instance finalization
+class FinalizeTicket : public ImmediateTicketRunner<FinalizeTicket>,
+ private ComponentsOverElements {
+public:
+ RT_API_ATTRS FinalizeTicket(
+ const Descriptor &instance, const typeInfo::DerivedType &derived)
+ : ImmediateTicketRunner<FinalizeTicket>{*this},
+ ComponentsOverElements{instance, derived} {}
+ RT_API_ATTRS int Begin(WorkQueue &);
+ RT_API_ATTRS int Continue(WorkQueue &);
+
+private:
+ const typeInfo::DerivedType *finalizableParentType_{nullptr};
+};
+
+// Implements derived type instance destruction
+class DestroyTicket : public ImmediateTicketRunner<DestroyTicket>,
+ private ComponentsOverElements {
+public:
+ RT_API_ATTRS DestroyTicket(const Descriptor &instance,
+ const typeInfo::DerivedType &derived, bool finalize)
+ : ImmediateTicketRunner<DestroyTicket>{*this},
+ ComponentsOverElements{instance, derived}, finalize_{finalize},
+ fixedStride_{instance.FixedStride()} {}
+ RT_API_ATTRS int Begin(WorkQueue &);
+ RT_API_ATTRS int Continue(WorkQueue &);
+
+private:
+ bool finalize_{false};
+ common::optional<SubscriptValue> fixedStride_;
+};
+
+// Implements general intrinsic assignment
+class AssignTicket : public ImmediateTicketRunner<AssignTicket> {
+public:
+ RT_API_ATTRS AssignTicket(Descriptor &to, const Descriptor &from, int flags,
+ MemmoveFct memmoveFct, const typeInfo::DerivedType *declaredType)
+ : ImmediateTicketRunner<AssignTicket>{*this}, to_{to}, from_{&from},
+ flags_{flags}, memmoveFct_{memmoveFct}, declaredType_{declaredType} {}
+ RT_API_ATTRS int Begin(WorkQueue &);
+ RT_API_ATTRS int Continue(WorkQueue &);
+
+private:
+ RT_API_ATTRS Descriptor &GetTempDescriptor();
+ RT_API_ATTRS bool IsSimpleMemmove() const {
+ return !toDerived_ && to_.rank() == from_->rank() && to_.IsContiguous() &&
+ from_->IsContiguous() && to_.ElementBytes() == from_->ElementBytes();
+ }
+
+ Descriptor &to_;
+ const Descriptor *from_{nullptr};
+ int flags_{0}; // enum AssignFlags
+ MemmoveFct memmoveFct_{nullptr};
+ StaticDescriptor<common::maxRank, true, 0> tempDescriptor_;
+ const typeInfo::DerivedType *declaredType_{nullptr};
+ const typeInfo::DerivedType *toDerived_{nullptr};
+ Descriptor *toDeallocate_{nullptr};
+ bool persist_{false};
+ bool done_{false};
+};
+
+// Implements derived type intrinsic assignment.
+template <bool IS_COMPONENTWISE>
+class DerivedAssignTicket
+ : public ImmediateTicketRunner<DerivedAssignTicket<IS_COMPONENTWISE>>,
+ private std::conditional_t<IS_COMPONENTWISE, ComponentsOverElements,
+ ElementsOverComponents> {
+public:
+ using Base = std::conditional_t<IS_COMPONENTWISE, ComponentsOverElements,
+ ElementsOverComponents>;
+ RT_API_ATTRS DerivedAssignTicket(const Descriptor &to, const Descriptor &from,
+ const typeInfo::DerivedType &derived, int flags, MemmoveFct memmoveFct,
+ Descriptor *deallocateAfter)
+ : ImmediateTicketRunner<DerivedAssignTicket>{*this},
+ Base{to, derived, &from}, flags_{flags}, memmoveFct_{memmoveFct},
+ deallocateAfter_{deallocateAfter} {}
+ RT_API_ATTRS int Begin(WorkQueue &);
+ RT_API_ATTRS int Continue(WorkQueue &);
+
+private:
+ static constexpr bool isComponentwise_{IS_COMPONENTWISE};
+ bool toIsContiguous_{this->instance_.IsContiguous()};
+ bool fromIsContiguous_{this->from_->IsContiguous()};
+ int flags_{0};
+ MemmoveFct memmoveFct_{nullptr};
+ Descriptor *deallocateAfter_{nullptr};
+ StaticDescriptor<common::maxRank, true, 0> fromComponentDescriptor_;
+};
+
+namespace io::descr {
+
+template <io::Direction DIR>
+class DescriptorIoTicket
+ : public ImmediateTicketRunner<DescriptorIoTicket<DIR>>,
+ private Elementwise {
+public:
+ RT_API_ATTRS DescriptorIoTicket(io::IoStatementState &io,
+ const Descriptor &descriptor, const io::NonTbpDefinedIoTable *table,
+ bool &anyIoTookPlace)
+ : ImmediateTicketRunner<DescriptorIoTicket>(*this),
+ Elementwise{descriptor}, io_{io}, table_{table},
+ anyIoTookPlace_{anyIoTookPlace} {}
+
+ RT_API_ATTRS int Begin(WorkQueue &);
+ RT_API_ATTRS int Continue(WorkQueue &);
+ RT_API_ATTRS bool &anyIoTookPlace() { return anyIoTookPlace_; }
+
+private:
+ io::IoStatementState &io_;
+ const io::NonTbpDefinedIoTable *table_{nullptr};
+ bool &anyIoTookPlace_;
+ common::optional<typeInfo::SpecialBinding> nonTbpSpecial_;
+ const typeInfo::DerivedType *derived_{nullptr};
+ const typeInfo::SpecialBinding *special_{nullptr};
+ StaticDescriptor<common::maxRank, true, 0> elementDescriptor_;
+};
+
+template <io::Direction DIR>
+class DerivedIoTicket : public ImmediateTicketRunner<DerivedIoTicket<DIR>>,
+ private ElementsOverComponents {
+public:
+ RT_API_ATTRS DerivedIoTicket(io::IoStatementState &io,
+ const Descriptor &descriptor, const typeInfo::DerivedType &derived,
+ const io::NonTbpDefinedIoTable *table, bool &anyIoTookPlace)
+ : ImmediateTicketRunner<DerivedIoTicket>(*this),
+ ElementsOverComponents{descriptor, derived}, io_{io}, table_{table},
+ anyIoTookPlace_{anyIoTookPlace} {}
+ RT_API_ATTRS int Begin(WorkQueue &) { return StatContinue; }
+ RT_API_ATTRS int Continue(WorkQueue &);
+
+private:
+ io::IoStatementState &io_;
+ const io::NonTbpDefinedIoTable *table_{nullptr};
+ bool &anyIoTookPlace_;
+};
+
+} // namespace io::descr
+
+struct NullTicket {
+ RT_API_ATTRS int Begin(WorkQueue &) const { return StatOk; }
+ RT_API_ATTRS int Continue(WorkQueue &) const { return StatOk; }
+};
+
+struct Ticket {
+ RT_API_ATTRS int Continue(WorkQueue &);
+ bool begun{false};
+ std::variant<NullTicket, InitializeTicket, InitializeCloneTicket,
+ FinalizeTicket, DestroyTicket, AssignTicket, DerivedAssignTicket<false>,
+ DerivedAssignTicket<true>,
+ io::descr::DescriptorIoTicket<io::Direction::Output>,
+ io::descr::DescriptorIoTicket<io::Direction::Input>,
+ io::descr::DerivedIoTicket<io::Direction::Output>,
+ io::descr::DerivedIoTicket<io::Direction::Input>>
+ u;
+};
+
+class WorkQueue {
+public:
+ RT_API_ATTRS explicit WorkQueue(Terminator &terminator)
+ : terminator_{terminator} {
+ for (int j{1}; j < numStatic_; ++j) {
+ static_[j].previous = &static_[j - 1];
+ static_[j - 1].next = &static_[j];
+ }
+ }
+ RT_API_ATTRS ~WorkQueue();
+ RT_API_ATTRS Terminator &terminator() { return terminator_; };
+
+ // APIs for particular tasks. These can return StatOk if the work is
+ // completed immediately.
+ RT_API_ATTRS int BeginInitialize(
+ const Descriptor &descriptor, const typeInfo::DerivedType &derived) {
+ if (runTicketsImmediately_) {
+ return InitializeTicket{descriptor, derived}.Run(*this);
+ } else {
+ StartTicket().u.emplace<InitializeTicket>(descriptor, derived);
+ return StatContinue;
+ }
+ }
+ RT_API_ATTRS int BeginInitializeClone(const Descriptor &clone,
+ const Descriptor &original, const typeInfo::DerivedType &derived,
+ bool hasStat, const Descriptor *errMsg) {
+ if (runTicketsImmediately_) {
+ return InitializeCloneTicket{clone, original, derived, hasStat, errMsg}
+ .Run(*this);
+ } else {
+ StartTicket().u.emplace<InitializeCloneTicket>(
+ clone, original, derived, hasStat, errMsg);
+ return StatContinue;
+ }
+ }
+ RT_API_ATTRS int BeginFinalize(
+ const Descriptor &descriptor, const typeInfo::DerivedType &derived) {
+ if (runTicketsImmediately_) {
+ return FinalizeTicket{descriptor, derived}.Run(*this);
+ } else {
+ StartTicket().u.emplace<FinalizeTicket>(descriptor, derived);
+ return StatContinue;
+ }
+ }
+ RT_API_ATTRS int BeginDestroy(const Descriptor &descriptor,
+ const typeInfo::DerivedType &derived, bool finalize) {
+ if (runTicketsImmediately_) {
+ return DestroyTicket{descriptor, derived, finalize}.Run(*this);
+ } else {
+ StartTicket().u.emplace<DestroyTicket>(descriptor, derived, finalize);
+ return StatContinue;
+ }
+ }
+ RT_API_ATTRS int BeginAssign(Descriptor &to, const Descriptor &from,
+ int flags, MemmoveFct memmoveFct,
+ const typeInfo::DerivedType *declaredType) {
+ if (runTicketsImmediately_) {
+ return AssignTicket{to, from, flags, memmoveFct, declaredType}.Run(*this);
+ } else {
+ StartTicket().u.emplace<AssignTicket>(
+ to, from, flags, memmoveFct, declaredType);
+ return StatContinue;
+ }
+ }
+ template <bool IS_COMPONENTWISE>
+ RT_API_ATTRS int BeginDerivedAssign(Descriptor &to, const Descriptor &from,
+ const typeInfo::DerivedType &derived, int flags, MemmoveFct memmoveFct,
+ Descriptor *deallocateAfter) {
+ if (runTicketsImmediately_) {
+ return DerivedAssignTicket<IS_COMPONENTWISE>{
+ to, from, derived, flags, memmoveFct, deallocateAfter}
+ .Run(*this);
+ } else {
+ StartTicket().u.emplace<DerivedAssignTicket<IS_COMPONENTWISE>>(
+ to, from, derived, flags, memmoveFct, deallocateAfter);
+ return StatContinue;
+ }
+ }
+ template <io::Direction DIR>
+ RT_API_ATTRS int BeginDescriptorIo(io::IoStatementState &io,
+ const Descriptor &descriptor, const io::NonTbpDefinedIoTable *table,
+ bool &anyIoTookPlace) {
+ if (runTicketsImmediately_) {
+ return io::descr::DescriptorIoTicket<DIR>{
+ io, descriptor, table, anyIoTookPlace}
+ .Run(*this);
+ } else {
+ StartTicket().u.emplace<io::descr::DescriptorIoTicket<DIR>>(
+ io, descriptor, table, anyIoTookPlace);
+ return StatContinue;
+ }
+ }
+ template <io::Direction DIR>
+ RT_API_ATTRS int BeginDerivedIo(io::IoStatementState &io,
+ const Descriptor &descriptor, const typeInfo::DerivedType &derived,
+ const io::NonTbpDefinedIoTable *table, bool &anyIoTookPlace) {
+ if (runTicketsImmediately_) {
+ return io::descr::DerivedIoTicket<DIR>{
+ io, descriptor, derived, table, anyIoTookPlace}
+ .Run(*this);
+ } else {
+ StartTicket().u.emplace<io::descr::DerivedIoTicket<DIR>>(
+ io, descriptor, derived, table, anyIoTookPlace);
+ return StatContinue;
+ }
+ }
+
+ RT_API_ATTRS int Run();
+
+private:
+#if RT_DEVICE_COMPILATION
+ // Always use the work queue on a GPU device to avoid recursion.
+ static constexpr bool runTicketsImmediately_{false};
+#else
+ // Avoid the work queue overhead on the host, unless it needs
+ // debugging, which is so much easier there.
+ static constexpr bool runTicketsImmediately_{true};
+#endif
+
+ // Most uses of the work queue won't go very deep.
+ static constexpr int numStatic_{2};
+
+ struct TicketList {
+ bool isStatic{true};
+ Ticket ticket;
+ TicketList *previous{nullptr}, *next{nullptr};
+ };
+
+ RT_API_ATTRS Ticket &StartTicket();
+ RT_API_ATTRS void Stop();
+
+ Terminator &terminator_;
+ TicketList *first_{nullptr}, *last_{nullptr}, *insertAfter_{nullptr};
+ TicketList static_[numStatic_];
+ TicketList *firstFree_{static_};
+ bool anyDynamicAllocation_{false};
+};
+
+RT_OFFLOAD_API_GROUP_END
+
+} // namespace Fortran::runtime
+#endif // FLANG_RT_RUNTIME_WORK_QUEUE_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/ISO_Fortran_binding.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/ISO_Fortran_binding.cpp
new file mode 100644
index 00000000000..a5f8b357ae0
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/ISO_Fortran_binding.cpp
@@ -0,0 +1,302 @@
+//===-- lib/runtime/ISO_Fortran_binding.cpp ---------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Implements the required interoperability API from ISO_Fortran_binding.h
+// as specified in section 18.5.5 of Fortran 2018.
+
+#include "ISO_Fortran_util.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/type-code.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
+#include "flang/Runtime/pointer.h"
+#include <cstdlib>
+
+namespace Fortran::ISO {
+extern "C" {
+
+RT_EXT_API_GROUP_BEGIN
+
+RT_API_ATTRS void *CFI_address(
+ const CFI_cdesc_t *descriptor, const CFI_index_t subscripts[]) {
+ char *p{static_cast<char *>(descriptor->base_addr)};
+ const CFI_rank_t rank{descriptor->rank};
+ const CFI_dim_t *dim{descriptor->dim};
+ for (CFI_rank_t j{0}; j < rank; ++j, ++dim) {
+ p += (subscripts[j] - dim->lower_bound) * dim->sm;
+ }
+ return p;
+}
+
+RT_API_ATTRS int CFI_allocate(CFI_cdesc_t *descriptor,
+ const CFI_index_t lower_bounds[], const CFI_index_t upper_bounds[],
+ std::size_t elem_len) {
+ if (!descriptor) {
+ return CFI_INVALID_DESCRIPTOR;
+ }
+ if (descriptor->version != CFI_VERSION) {
+ return CFI_INVALID_DESCRIPTOR;
+ }
+ if (descriptor->attribute != CFI_attribute_allocatable &&
+ descriptor->attribute != CFI_attribute_pointer) {
+ // Non-interoperable object
+ return CFI_INVALID_ATTRIBUTE;
+ }
+ if (descriptor->attribute == CFI_attribute_allocatable &&
+ descriptor->base_addr) {
+ return CFI_ERROR_BASE_ADDR_NOT_NULL;
+ }
+ if (descriptor->rank > CFI_MAX_RANK) {
+ return CFI_INVALID_RANK;
+ }
+ if (descriptor->type < CFI_type_signed_char ||
+ descriptor->type > CFI_TYPE_LAST) {
+ return CFI_INVALID_TYPE;
+ }
+ if (!IsCharacterType(descriptor->type)) {
+ elem_len = descriptor->elem_len;
+ if (elem_len <= 0) {
+ return CFI_INVALID_ELEM_LEN;
+ }
+ }
+ std::size_t rank{descriptor->rank};
+ CFI_dim_t *dim{descriptor->dim};
+ std::size_t byteSize{elem_len};
+ for (std::size_t j{0}; j < rank; ++j, ++dim) {
+ CFI_index_t lb{lower_bounds[j]};
+ CFI_index_t ub{upper_bounds[j]};
+ CFI_index_t extent{ub >= lb ? ub - lb + 1 : 0};
+ dim->lower_bound = extent == 0 ? 1 : lb;
+ dim->extent = extent;
+ dim->sm = byteSize;
+ byteSize *= extent;
+ }
+ void *p{runtime::AllocateValidatedPointerPayload(byteSize)};
+ if (!p && byteSize) {
+ return CFI_ERROR_MEM_ALLOCATION;
+ }
+ descriptor->base_addr = p;
+ descriptor->elem_len = elem_len;
+ return CFI_SUCCESS;
+}
+
+RT_API_ATTRS int CFI_deallocate(CFI_cdesc_t *descriptor) {
+ if (!descriptor) {
+ return CFI_INVALID_DESCRIPTOR;
+ }
+ if (descriptor->version != CFI_VERSION) {
+ return CFI_INVALID_DESCRIPTOR;
+ }
+ if (descriptor->attribute == CFI_attribute_pointer) {
+ if (!runtime::ValidatePointerPayload(*descriptor)) {
+ return CFI_INVALID_DESCRIPTOR;
+ }
+ } else if (descriptor->attribute != CFI_attribute_allocatable) {
+ // Non-interoperable object
+ return CFI_INVALID_DESCRIPTOR;
+ }
+ if (!descriptor->base_addr) {
+ return CFI_ERROR_BASE_ADDR_NULL;
+ }
+ std::free(descriptor->base_addr);
+ descriptor->base_addr = nullptr;
+ return CFI_SUCCESS;
+}
+
+RT_API_ATTRS int CFI_establish(CFI_cdesc_t *descriptor, void *base_addr,
+ CFI_attribute_t attribute, CFI_type_t type, std::size_t elem_len,
+ CFI_rank_t rank, const CFI_index_t extents[]) {
+ int cfiStatus{VerifyEstablishParameters(descriptor, base_addr, attribute,
+ type, elem_len, rank, extents, /*external=*/true)};
+ if (cfiStatus != CFI_SUCCESS) {
+ return cfiStatus;
+ }
+ if (type != CFI_type_struct && type != CFI_type_other &&
+ !IsCharacterType(type)) {
+ elem_len = MinElemLen(type);
+ }
+ if (elem_len <= 0) {
+ return CFI_INVALID_ELEM_LEN;
+ }
+ EstablishDescriptor(
+ descriptor, base_addr, attribute, type, elem_len, rank, extents);
+ return CFI_SUCCESS;
+}
+
+RT_API_ATTRS int CFI_is_contiguous(const CFI_cdesc_t *descriptor) {
+ // See Descriptor::IsContiguous for the rationale.
+ bool stridesAreContiguous{true};
+ CFI_index_t bytes = descriptor->elem_len;
+ for (int j{0}; j < descriptor->rank; ++j) {
+ stridesAreContiguous &=
+ (bytes == descriptor->dim[j].sm) || (descriptor->dim[j].extent == 1);
+ bytes *= descriptor->dim[j].extent;
+ }
+ if (stridesAreContiguous || bytes == 0) {
+ return 1;
+ }
+ return 0;
+}
+
+RT_API_ATTRS int CFI_section(CFI_cdesc_t *result, const CFI_cdesc_t *source,
+ const CFI_index_t lower_bounds[], const CFI_index_t upper_bounds[],
+ const CFI_index_t strides[]) {
+ CFI_index_t extent[CFI_MAX_RANK];
+ CFI_index_t actualStride[CFI_MAX_RANK];
+ CFI_rank_t resRank{0};
+
+ if (!result || !source) {
+ return CFI_INVALID_DESCRIPTOR;
+ }
+ if (source->rank == 0) {
+ return CFI_INVALID_RANK;
+ }
+ if (IsAssumedSize(source) && !upper_bounds) {
+ return CFI_INVALID_DESCRIPTOR;
+ }
+ if (runtime::TypeCode{result->type} != runtime::TypeCode{source->type}) {
+ return CFI_INVALID_TYPE;
+ }
+ if (source->elem_len != result->elem_len) {
+ return CFI_INVALID_ELEM_LEN;
+ }
+ if (result->attribute == CFI_attribute_allocatable) {
+ return CFI_INVALID_ATTRIBUTE;
+ }
+ if (!source->base_addr) {
+ return CFI_ERROR_BASE_ADDR_NULL;
+ }
+
+ char *shiftedBaseAddr{static_cast<char *>(source->base_addr)};
+ bool isZeroSized{false};
+ for (int j{0}; j < source->rank; ++j) {
+ const CFI_dim_t &dim{source->dim[j]};
+ const CFI_index_t srcLB{dim.lower_bound};
+ const CFI_index_t srcUB{srcLB + dim.extent - 1};
+ const CFI_index_t lb{lower_bounds ? lower_bounds[j] : srcLB};
+ const CFI_index_t ub{upper_bounds ? upper_bounds[j] : srcUB};
+ const CFI_index_t stride{strides ? strides[j] : 1};
+
+ if (stride == 0 && lb != ub) {
+ return CFI_ERROR_OUT_OF_BOUNDS;
+ }
+ if ((lb <= ub && stride >= 0) || (lb >= ub && stride < 0)) {
+ if ((lb < srcLB) || (lb > srcUB) || (ub < srcLB) || (ub > srcUB)) {
+ return CFI_ERROR_OUT_OF_BOUNDS;
+ }
+ shiftedBaseAddr += (lb - srcLB) * dim.sm;
+ extent[j] = stride != 0 ? 1 + (ub - lb) / stride : 1;
+ } else {
+ isZeroSized = true;
+ extent[j] = 0;
+ }
+ actualStride[j] = stride;
+ resRank += (stride != 0);
+ }
+ if (resRank != result->rank) {
+ return CFI_INVALID_DESCRIPTOR;
+ }
+
+ // For zero-sized arrays, base_addr is processor-dependent (see 18.5.3).
+ // We keep it on the source base_addr
+ result->base_addr = isZeroSized ? source->base_addr : shiftedBaseAddr;
+ resRank = 0;
+ for (int j{0}; j < source->rank; ++j) {
+ if (actualStride[j] != 0) {
+ result->dim[resRank].extent = extent[j];
+ result->dim[resRank].lower_bound = extent[j] == 0 ? 1
+ : lower_bounds ? lower_bounds[j]
+ : source->dim[j].lower_bound;
+ result->dim[resRank].sm = actualStride[j] * source->dim[j].sm;
+ ++resRank;
+ }
+ }
+ return CFI_SUCCESS;
+}
+
+RT_API_ATTRS int CFI_select_part(CFI_cdesc_t *result, const CFI_cdesc_t *source,
+ std::size_t displacement, std::size_t elem_len) {
+ if (!result || !source) {
+ return CFI_INVALID_DESCRIPTOR;
+ }
+ if (result->rank != source->rank) {
+ return CFI_INVALID_RANK;
+ }
+ if (result->attribute == CFI_attribute_allocatable) {
+ return CFI_INVALID_ATTRIBUTE;
+ }
+ if (!source->base_addr) {
+ return CFI_ERROR_BASE_ADDR_NULL;
+ }
+ if (IsAssumedSize(source)) {
+ return CFI_INVALID_DESCRIPTOR;
+ }
+
+ if (!IsCharacterType(result->type)) {
+ elem_len = result->elem_len;
+ }
+ if (displacement + elem_len > source->elem_len) {
+ return CFI_INVALID_ELEM_LEN;
+ }
+
+ result->base_addr = displacement + static_cast<char *>(source->base_addr);
+ result->elem_len = elem_len;
+ for (int j{0}; j < source->rank; ++j) {
+ result->dim[j].lower_bound = 0;
+ result->dim[j].extent = source->dim[j].extent;
+ result->dim[j].sm = source->dim[j].sm;
+ }
+ return CFI_SUCCESS;
+}
+
+RT_API_ATTRS int CFI_setpointer(CFI_cdesc_t *result, const CFI_cdesc_t *source,
+ const CFI_index_t lower_bounds[]) {
+ if (!result) {
+ return CFI_INVALID_DESCRIPTOR;
+ }
+ if (result->attribute != CFI_attribute_pointer) {
+ return CFI_INVALID_ATTRIBUTE;
+ }
+ if (!source) {
+ result->base_addr = nullptr;
+ return CFI_SUCCESS;
+ }
+ if (source->rank != result->rank) {
+ return CFI_INVALID_RANK;
+ }
+ if (runtime::TypeCode{source->type} != runtime::TypeCode{result->type}) {
+ return CFI_INVALID_TYPE;
+ }
+ if (source->elem_len != result->elem_len) {
+ return CFI_INVALID_ELEM_LEN;
+ }
+ if (!source->base_addr && source->attribute != CFI_attribute_pointer) {
+ return CFI_ERROR_BASE_ADDR_NULL;
+ }
+ if (IsAssumedSize(source)) {
+ return CFI_INVALID_DESCRIPTOR;
+ }
+
+ const bool copySrcLB{!lower_bounds};
+ result->base_addr = source->base_addr;
+ if (source->base_addr) {
+ for (int j{0}; j < result->rank; ++j) {
+ CFI_index_t extent{source->dim[j].extent};
+ result->dim[j].extent = extent;
+ result->dim[j].sm = source->dim[j].sm;
+ result->dim[j].lower_bound = extent == 0 ? 1
+ : copySrcLB ? source->dim[j].lower_bound
+ : lower_bounds[j];
+ }
+ }
+ return CFI_SUCCESS;
+}
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+} // namespace Fortran::ISO
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/ISO_Fortran_util.h b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/ISO_Fortran_util.h
new file mode 100644
index 00000000000..9bbc03eefc4
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/ISO_Fortran_util.h
@@ -0,0 +1,102 @@
+//===-- lib/runtime/ISO_Fortran_util.h --------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FLANG_RT_RUNTIME_ISO_FORTRAN_UTIL_H_
+#define FLANG_RT_RUNTIME_ISO_FORTRAN_UTIL_H_
+
+// Internal utils for establishing CFI_cdesc_t descriptors.
+
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/type-code.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
+#include <cstdlib>
+
+namespace Fortran::ISO {
+static inline constexpr RT_API_ATTRS bool IsCharacterType(CFI_type_t ty) {
+ return ty == CFI_type_char || ty == CFI_type_char16_t ||
+ ty == CFI_type_char32_t;
+}
+static inline constexpr RT_API_ATTRS bool IsAssumedSize(const CFI_cdesc_t *dv) {
+ return dv->rank > 0 && dv->dim[dv->rank - 1].extent == -1;
+}
+
+static inline RT_API_ATTRS std::size_t MinElemLen(CFI_type_t type) {
+ auto typeParams{Fortran::runtime::TypeCode{type}.GetCategoryAndKind()};
+ if (!typeParams) {
+ Fortran::runtime::Terminator terminator{__FILE__, __LINE__};
+ terminator.Crash(
+ "not yet implemented: CFI_type_t=%d", static_cast<int>(type));
+ }
+
+ return Fortran::runtime::Descriptor::BytesFor(
+ typeParams->first, typeParams->second);
+}
+
+static inline RT_API_ATTRS int VerifyEstablishParameters(
+ CFI_cdesc_t *descriptor, void *base_addr, CFI_attribute_t attribute,
+ CFI_type_t type, std::size_t elem_len, CFI_rank_t rank,
+ const CFI_index_t extents[], bool external) {
+ if (attribute != CFI_attribute_other && attribute != CFI_attribute_pointer &&
+ attribute != CFI_attribute_allocatable) {
+ return CFI_INVALID_ATTRIBUTE;
+ }
+ if (rank > CFI_MAX_RANK) {
+ return CFI_INVALID_RANK;
+ }
+ if (base_addr && attribute == CFI_attribute_allocatable) {
+ return CFI_ERROR_BASE_ADDR_NOT_NULL;
+ }
+ if (rank > 0 && base_addr && !extents) {
+ return CFI_INVALID_EXTENT;
+ }
+ if (type < CFI_type_signed_char || type > CFI_TYPE_LAST) {
+ return CFI_INVALID_TYPE;
+ }
+ if (!descriptor) {
+ return CFI_INVALID_DESCRIPTOR;
+ }
+ if (external) {
+ if (type == CFI_type_struct || type == CFI_type_other ||
+ IsCharacterType(type)) {
+ if (elem_len <= 0) {
+ return CFI_INVALID_ELEM_LEN;
+ }
+ }
+ } else {
+ // We do not expect CFI_type_other for internal invocations.
+ if (type == CFI_type_other) {
+ return CFI_INVALID_TYPE;
+ }
+ }
+ return CFI_SUCCESS;
+}
+
+static inline RT_API_ATTRS void EstablishDescriptor(CFI_cdesc_t *descriptor,
+ void *base_addr, CFI_attribute_t attribute, CFI_type_t type,
+ std::size_t elem_len, CFI_rank_t rank, const CFI_index_t extents[]) {
+ descriptor->base_addr = base_addr;
+ descriptor->elem_len = elem_len;
+ descriptor->version = CFI_VERSION;
+ descriptor->rank = rank;
+ descriptor->type = type;
+ descriptor->attribute = attribute;
+ descriptor->extra = 0;
+ std::size_t byteSize{elem_len};
+ constexpr std::size_t lower_bound{0};
+ if (base_addr) {
+ for (std::size_t j{0}; j < rank; ++j) {
+ descriptor->dim[j].lower_bound = lower_bound;
+ descriptor->dim[j].extent = extents[j];
+ descriptor->dim[j].sm = byteSize;
+ byteSize *= extents[j];
+ }
+ }
+}
+} // namespace Fortran::ISO
+#endif // FLANG_RT_RUNTIME_ISO_FORTRAN_UTIL_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/allocatable.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/allocatable.cpp
new file mode 100644
index 00000000000..f724f0a2088
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/allocatable.cpp
@@ -0,0 +1,246 @@
+//===-- lib/runtime/allocatable.cpp -----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang/Runtime/allocatable.h"
+#include "flang-rt/runtime/assign-impl.h"
+#include "flang-rt/runtime/derived.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/stat.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/type-info.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
+#include "flang/Runtime/assign.h"
+
+namespace Fortran::runtime {
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+void RTDEF(AllocatableInitIntrinsic)(Descriptor &descriptor,
+ TypeCategory category, int kind, int rank, int corank) {
+ INTERNAL_CHECK(corank == 0);
+ descriptor.Establish(TypeCode{category, kind},
+ Descriptor::BytesFor(category, kind), nullptr, rank, nullptr,
+ CFI_attribute_allocatable);
+}
+
+void RTDEF(AllocatableInitCharacter)(Descriptor &descriptor,
+ SubscriptValue length, int kind, int rank, int corank) {
+ INTERNAL_CHECK(corank == 0);
+ descriptor.Establish(
+ kind, length, nullptr, rank, nullptr, CFI_attribute_allocatable);
+}
+
+void RTDEF(AllocatableInitDerived)(Descriptor &descriptor,
+ const typeInfo::DerivedType &derivedType, int rank, int corank) {
+ INTERNAL_CHECK(corank == 0);
+ descriptor.Establish(
+ derivedType, nullptr, rank, nullptr, CFI_attribute_allocatable);
+}
+
+void RTDEF(AllocatableInitIntrinsicForAllocate)(Descriptor &descriptor,
+ TypeCategory category, int kind, int rank, int corank) {
+ if (!descriptor.IsAllocated()) {
+ RTNAME(AllocatableInitIntrinsic)(descriptor, category, kind, rank, corank);
+ }
+}
+
+void RTDEF(AllocatableInitCharacterForAllocate)(Descriptor &descriptor,
+ SubscriptValue length, int kind, int rank, int corank) {
+ if (!descriptor.IsAllocated()) {
+ RTNAME(AllocatableInitCharacter)(descriptor, length, kind, rank, corank);
+ }
+}
+
+void RTDEF(AllocatableInitDerivedForAllocate)(Descriptor &descriptor,
+ const typeInfo::DerivedType &derivedType, int rank, int corank) {
+ if (!descriptor.IsAllocated()) {
+ RTNAME(AllocatableInitDerived)(descriptor, derivedType, rank, corank);
+ }
+}
+
+std::int32_t RTDEF(MoveAlloc)(Descriptor &to, Descriptor &from,
+ const typeInfo::DerivedType *derivedType, bool hasStat,
+ const Descriptor *errMsg, const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+
+ // If to and from are the same allocatable they must not be allocated
+ // and nothing should be done.
+ if (from.raw().base_addr == to.raw().base_addr && from.IsAllocated()) {
+ return ReturnError(
+ terminator, StatMoveAllocSameAllocatable, errMsg, hasStat);
+ }
+
+ if (to.IsAllocated()) {
+ int stat{
+ to.Destroy(/*finalize=*/true, /*destroyPointers=*/false, &terminator)};
+ if (stat != StatOk) {
+ return ReturnError(terminator, stat, errMsg, hasStat);
+ }
+ }
+
+ // If from isn't allocated, the standard defines that nothing should be done.
+ if (from.IsAllocated()) {
+ to = from;
+ from.raw().base_addr = nullptr;
+
+ // Carry over the dynamic type.
+ if (auto *toAddendum{to.Addendum()}) {
+ if (const auto *fromAddendum{from.Addendum()}) {
+ if (const auto *derived{fromAddendum->derivedType()}) {
+ toAddendum->set_derivedType(derived);
+ }
+ }
+ }
+
+ // Reset from dynamic type if needed.
+ if (auto *fromAddendum{from.Addendum()}) {
+ if (derivedType) {
+ fromAddendum->set_derivedType(derivedType);
+ }
+ }
+ }
+
+ return StatOk;
+}
+
+void RTDEF(AllocatableSetBounds)(Descriptor &descriptor, int zeroBasedDim,
+ SubscriptValue lower, SubscriptValue upper) {
+ INTERNAL_CHECK(zeroBasedDim >= 0 && zeroBasedDim < descriptor.rank());
+ if (descriptor.IsAllocatable() && !descriptor.IsAllocated()) {
+ descriptor.GetDimension(zeroBasedDim).SetBounds(lower, upper);
+ // The byte strides are computed when the object is allocated.
+ }
+}
+
+void RTDEF(AllocatableSetDerivedLength)(
+ Descriptor &descriptor, int which, SubscriptValue x) {
+ if (descriptor.IsAllocatable() && !descriptor.IsAllocated()) {
+ DescriptorAddendum *addendum{descriptor.Addendum()};
+ INTERNAL_CHECK(addendum != nullptr);
+ addendum->SetLenParameterValue(which, x);
+ }
+}
+
+void RTDEF(AllocatableApplyMold)(
+ Descriptor &descriptor, const Descriptor &mold, int rank) {
+ if (descriptor.IsAllocatable() && !descriptor.IsAllocated()) {
+ descriptor.ApplyMold(mold, rank);
+ }
+}
+
+int RTDEF(AllocatableAllocate)(Descriptor &descriptor,
+ std::int64_t *asyncObject, bool hasStat, const Descriptor *errMsg,
+ const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ if (!descriptor.IsAllocatable()) {
+ return ReturnError(terminator, StatInvalidDescriptor, errMsg, hasStat);
+ } else if (descriptor.IsAllocated()) {
+ return ReturnError(terminator, StatBaseNotNull, errMsg, hasStat);
+ } else {
+ int stat{ReturnError(
+ terminator, descriptor.Allocate(asyncObject), errMsg, hasStat)};
+ if (stat == StatOk) {
+ if (const DescriptorAddendum * addendum{descriptor.Addendum()}) {
+ if (const auto *derived{addendum->derivedType()}) {
+ if (!derived->noInitializationNeeded()) {
+ stat =
+ Initialize(descriptor, *derived, terminator, hasStat, errMsg);
+ }
+ }
+ }
+ }
+ return stat;
+ }
+}
+
+int RTDEF(AllocatableAllocateSource)(Descriptor &alloc,
+ const Descriptor &source, bool hasStat, const Descriptor *errMsg,
+ const char *sourceFile, int sourceLine) {
+ int stat{RTNAME(AllocatableAllocate)(
+ alloc, /*asyncObject=*/nullptr, hasStat, errMsg, sourceFile, sourceLine)};
+ if (stat == StatOk) {
+ Terminator terminator{sourceFile, sourceLine};
+ if (alloc.rank() != source.rank() && source.rank() != 0) {
+ terminator.Crash("ALLOCATE object has rank %d while SOURCE= has rank %d",
+ alloc.rank(), source.rank());
+ }
+ if (int rank{source.rank()}; rank > 0) {
+ SubscriptValue allocExtent[maxRank], sourceExtent[maxRank];
+ alloc.GetShape(allocExtent);
+ source.GetShape(sourceExtent);
+ for (int j{0}; j < rank; ++j) {
+ if (allocExtent[j] != sourceExtent[j]) {
+ if (!hasStat) {
+ terminator.Crash("ALLOCATE object has extent %jd on dimension %d, "
+ "but SOURCE= has extent %jd",
+ static_cast<std::intmax_t>(allocExtent[j]), j + 1,
+ static_cast<std::intmax_t>(sourceExtent[j]));
+ }
+ return StatInvalidExtent;
+ }
+ }
+ }
+ DoFromSourceAssign(alloc, source, terminator);
+ }
+ return stat;
+}
+
+int RTDEF(AllocatableDeallocate)(Descriptor &descriptor, bool hasStat,
+ const Descriptor *errMsg, const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ if (!descriptor.IsAllocatable()) {
+ return ReturnError(terminator, StatInvalidDescriptor, errMsg, hasStat);
+ } else if (!descriptor.IsAllocated()) {
+ return ReturnError(terminator, StatBaseNull, errMsg, hasStat);
+ } else {
+ return ReturnError(terminator,
+ descriptor.Destroy(
+ /*finalize=*/true, /*destroyPointers=*/false, &terminator),
+ errMsg, hasStat);
+ }
+}
+
+int RTDEF(AllocatableDeallocatePolymorphic)(Descriptor &descriptor,
+ const typeInfo::DerivedType *derivedType, bool hasStat,
+ const Descriptor *errMsg, const char *sourceFile, int sourceLine) {
+ int stat{RTNAME(AllocatableDeallocate)(
+ descriptor, hasStat, errMsg, sourceFile, sourceLine)};
+ if (stat == StatOk) {
+ if (DescriptorAddendum * addendum{descriptor.Addendum()}) {
+ addendum->set_derivedType(derivedType);
+ descriptor.raw().type = derivedType ? CFI_type_struct : CFI_type_other;
+ } else {
+ // Unlimited polymorphic descriptors initialized with
+ // AllocatableInitIntrinsic do not have an addendum. Make sure the
+ // derivedType is null in that case.
+ INTERNAL_CHECK(!derivedType);
+ descriptor.raw().type = CFI_type_other;
+ }
+ }
+ return stat;
+}
+
+void RTDEF(AllocatableDeallocateNoFinal)(
+ Descriptor &descriptor, const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ if (!descriptor.IsAllocatable()) {
+ ReturnError(terminator, StatInvalidDescriptor);
+ } else if (!descriptor.IsAllocated()) {
+ ReturnError(terminator, StatBaseNull);
+ } else {
+ ReturnError(terminator,
+ descriptor.Destroy(
+ /*finalize=*/false, /*destroyPointers=*/false, &terminator));
+ }
+}
+
+// TODO: AllocatableCheckLengthParameter
+
+RT_EXT_API_GROUP_END
+}
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/allocator-registry.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/allocator-registry.cpp
new file mode 100644
index 00000000000..f8a8daaf8e7
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/allocator-registry.cpp
@@ -0,0 +1,42 @@
+//===-- lib/runtime/allocator-registry.cpp ----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang-rt/runtime/allocator-registry.h"
+#include "flang-rt/runtime/terminator.h"
+
+namespace Fortran::runtime {
+
+#ifndef FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+RT_OFFLOAD_VAR_GROUP_BEGIN
+RT_VAR_ATTRS AllocatorRegistry allocatorRegistry;
+RT_OFFLOAD_VAR_GROUP_END
+#endif // FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+
+RT_OFFLOAD_API_GROUP_BEGIN
+RT_API_ATTRS void AllocatorRegistry::Register(int pos, Allocator_t allocator) {
+ // pos 0 is reserved for the default allocator and is registered in the
+ // struct ctor.
+ INTERNAL_CHECK(pos > 0 && pos < MAX_ALLOCATOR);
+ allocators[pos] = allocator;
+}
+
+RT_API_ATTRS AllocFct AllocatorRegistry::GetAllocator(int pos) {
+ INTERNAL_CHECK(pos >= 0 && pos < MAX_ALLOCATOR);
+ AllocFct f{allocators[pos].alloc};
+ INTERNAL_CHECK(f != nullptr);
+ return f;
+}
+
+RT_API_ATTRS FreeFct AllocatorRegistry::GetDeallocator(int pos) {
+ INTERNAL_CHECK(pos >= 0 && pos < MAX_ALLOCATOR);
+ FreeFct f{allocators[pos].free};
+ INTERNAL_CHECK(f != nullptr);
+ return f;
+}
+RT_OFFLOAD_API_GROUP_END
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/array-constructor.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/array-constructor.cpp
new file mode 100644
index 00000000000..858fac7bf2b
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/array-constructor.cpp
@@ -0,0 +1,182 @@
+//===-- lib/runtime/array-constructor.cpp -----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang-rt/runtime/array-constructor.h"
+#include "flang-rt/runtime/derived.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+#include "flang-rt/runtime/type-info.h"
+#include "flang/Runtime/allocatable.h"
+#include "flang/Runtime/assign.h"
+
+namespace Fortran::runtime {
+
+// Initial allocation size for an array constructor temporary whose extent
+// cannot be pre-computed. This could be fined tuned if needed based on actual
+// program performance.
+// REAL(4), INTEGER(4), COMPLEX(2), ... -> 32 elements.
+// REAL(8), INTEGER(8), COMPLEX(4), ... -> 16 elements.
+// REAL(16), INTEGER(16), COMPLEX(8), ... -> 8 elements.
+// Bigger types -> 4 elements.
+static RT_API_ATTRS SubscriptValue initialAllocationSize(
+ SubscriptValue initialNumberOfElements, SubscriptValue elementBytes) {
+ // Try to guess an optimal initial allocation size in number of elements to
+ // avoid doing too many reallocation.
+ static constexpr SubscriptValue minNumberOfBytes{128};
+ static constexpr SubscriptValue minNumberOfElements{4};
+ SubscriptValue numberOfElements{initialNumberOfElements > minNumberOfElements
+ ? initialNumberOfElements
+ : minNumberOfElements};
+ SubscriptValue elementsForMinBytes{minNumberOfBytes / elementBytes};
+ return std::max(numberOfElements, elementsForMinBytes);
+}
+
+static RT_API_ATTRS void AllocateOrReallocateVectorIfNeeded(
+ ArrayConstructorVector &vector, Terminator &terminator,
+ SubscriptValue previousToElements, SubscriptValue fromElements) {
+ Descriptor &to{vector.to};
+ if (to.IsAllocatable() && !to.IsAllocated()) {
+ // The descriptor bounds may already be set here if the array constructor
+ // extent could be pre-computed, but information about length parameters
+ // was missing and required evaluating the first array constructor value.
+ if (previousToElements == 0) {
+ SubscriptValue allocationSize{
+ initialAllocationSize(fromElements, to.ElementBytes())};
+ to.GetDimension(0).SetBounds(1, allocationSize);
+ RTNAME(AllocatableAllocate)
+ (to, /*asyncObject=*/nullptr, /*hasStat=*/false, /*errMsg=*/nullptr,
+ vector.sourceFile, vector.sourceLine);
+ to.GetDimension(0).SetBounds(1, fromElements);
+ vector.actualAllocationSize = allocationSize;
+ } else {
+ // Do not over-allocate if the final extent was known before pushing the
+ // first value: there should be no reallocation.
+ RUNTIME_CHECK(terminator, previousToElements >= fromElements);
+ RTNAME(AllocatableAllocate)
+ (to, /*asyncObject=*/nullptr, /*hasStat=*/false, /*errMsg=*/nullptr,
+ vector.sourceFile, vector.sourceLine);
+ vector.actualAllocationSize = previousToElements;
+ }
+ } else {
+ SubscriptValue newToElements{vector.nextValuePosition + fromElements};
+ if (to.IsAllocatable() && vector.actualAllocationSize < newToElements) {
+ // Reallocate. Ensure the current storage is at least doubled to avoid
+ // doing too many reallocations.
+ SubscriptValue requestedAllocationSize{
+ std::max(newToElements, vector.actualAllocationSize * 2)};
+ std::size_t newByteSize{requestedAllocationSize * to.ElementBytes()};
+ // realloc is undefined with zero new size and ElementBytes() may be null
+ // if the character length is null, or if "from" is a zero sized array.
+ if (newByteSize > 0) {
+ void *p{ReallocateMemoryOrCrash(
+ terminator, to.raw().base_addr, newByteSize)};
+ to.set_base_addr(p);
+ }
+ vector.actualAllocationSize = requestedAllocationSize;
+ to.GetDimension(0).SetBounds(1, newToElements);
+ } else if (previousToElements < newToElements) {
+ // Storage is big enough, but descriptor extent must be increased because
+ // the final extent was not known before pushing array constructor values.
+ to.GetDimension(0).SetBounds(1, newToElements);
+ }
+ }
+}
+
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+void RTDEF(InitArrayConstructorVector)(ArrayConstructorVector &vector,
+ Descriptor &to, bool useValueLengthParameters, const char *sourceFile,
+ int sourceLine) {
+ Terminator terminator{vector.sourceFile, vector.sourceLine};
+ RUNTIME_CHECK(terminator, to.rank() == 1);
+ SubscriptValue actualAllocationSize{
+ to.IsAllocated() ? static_cast<SubscriptValue>(to.Elements()) : 0};
+ (void)new (&vector) ArrayConstructorVector{to, /*nextValuePosition=*/0,
+ actualAllocationSize, sourceFile, sourceLine, useValueLengthParameters};
+}
+
+void RTDEF(PushArrayConstructorValue)(
+ ArrayConstructorVector &vector, const Descriptor &from) {
+ Terminator terminator{vector.sourceFile, vector.sourceLine};
+ Descriptor &to{vector.to};
+ SubscriptValue fromElements{static_cast<SubscriptValue>(from.Elements())};
+ SubscriptValue previousToElements{static_cast<SubscriptValue>(to.Elements())};
+ if (vector.useValueLengthParameters()) {
+ // Array constructor with no type spec.
+ if (to.IsAllocatable() && !to.IsAllocated()) {
+ // Takes length parameters, if any, from the first value.
+ // Note that "to" type must already be set by the caller of this API since
+ // it cannot be taken from "from" here: "from" may be polymorphic (have a
+ // dynamic type that differs from its declared type) and Fortran 2018 7.8
+ // point 4. says that the dynamic type of an array constructor is its
+ // declared type: it does not inherit the dynamic type of its ac-value
+ // even if if there is no type-spec.
+ if (to.type().IsCharacter()) {
+ to.raw().elem_len = from.ElementBytes();
+ } else if (auto *toAddendum{to.Addendum()}) {
+ if (const auto *fromAddendum{from.Addendum()}) {
+ if (const auto *toDerived{toAddendum->derivedType()}) {
+ std::size_t lenParms{toDerived->LenParameters()};
+ for (std::size_t j{0}; j < lenParms; ++j) {
+ toAddendum->SetLenParameterValue(
+ j, fromAddendum->LenParameterValue(j));
+ }
+ }
+ }
+ }
+ } else if (to.type().IsCharacter()) {
+ // Fortran 2018 7.8 point 2.
+ if (to.ElementBytes() != from.ElementBytes()) {
+ terminator.Crash("Array constructor: mismatched character lengths (%d "
+ "!= %d) between "
+ "values of an array constructor without type-spec",
+ to.ElementBytes() / to.type().GetCategoryAndKind()->second,
+ from.ElementBytes() / from.type().GetCategoryAndKind()->second);
+ }
+ }
+ }
+ // Otherwise, the array constructor had a type-spec and the length
+ // parameters are already in the "to" descriptor.
+
+ AllocateOrReallocateVectorIfNeeded(
+ vector, terminator, previousToElements, fromElements);
+
+ // Create descriptor for "to" element or section being copied to.
+ SubscriptValue lower[1]{
+ to.GetDimension(0).LowerBound() + vector.nextValuePosition};
+ SubscriptValue upper[1]{lower[0] + fromElements - 1};
+ SubscriptValue stride[1]{from.rank() == 0 ? 0 : 1};
+ StaticDescriptor<maxRank, true, 1> staticDesc;
+ Descriptor &toCurrentElement{staticDesc.descriptor()};
+ toCurrentElement.EstablishPointerSection(to, lower, upper, stride);
+ // Note: toCurrentElement and from have the same number of elements
+ // and "toCurrentElement" is not an allocatable so AssignTemporary
+ // below works even if "from" rank is bigger than one (and differs
+ // from "toCurrentElement") and not time is wasted reshaping
+ // "toCurrentElement" to "from" shape.
+ RTNAME(AssignTemporary)
+ (toCurrentElement, from, vector.sourceFile, vector.sourceLine);
+ vector.nextValuePosition += fromElements;
+}
+
+void RTDEF(PushArrayConstructorSimpleScalar)(
+ ArrayConstructorVector &vector, void *from) {
+ Terminator terminator{vector.sourceFile, vector.sourceLine};
+ Descriptor &to{vector.to};
+ AllocateOrReallocateVectorIfNeeded(vector, terminator, to.Elements(), 1);
+ SubscriptValue subscript[1]{
+ to.GetDimension(0).LowerBound() + vector.nextValuePosition};
+ std::memcpy(to.Element<char>(subscript), from, to.ElementBytes());
+ ++vector.nextValuePosition;
+}
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/assign.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/assign.cpp
new file mode 100644
index 00000000000..d642ed578b0
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/assign.cpp
@@ -0,0 +1,833 @@
+//===-- lib/runtime/assign.cpp ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang/Runtime/assign.h"
+#include "flang-rt/runtime/assign-impl.h"
+#include "flang-rt/runtime/derived.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/stat.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+#include "flang-rt/runtime/type-info.h"
+#include "flang-rt/runtime/work-queue.h"
+
+namespace Fortran::runtime {
+
+// Predicate: is the left-hand side of an assignment an allocated allocatable
+// that must be deallocated?
+static inline RT_API_ATTRS bool MustDeallocateLHS(
+ Descriptor &to, const Descriptor &from, Terminator &terminator, int flags) {
+ // Top-level assignments to allocatable variables (*not* components)
+ // may first deallocate existing content if there's about to be a
+ // change in type or shape; see F'2018 10.2.1.3(3).
+ if (!(flags & MaybeReallocate)) {
+ return false;
+ }
+ if (!to.IsAllocatable() || !to.IsAllocated()) {
+ return false;
+ }
+ if (to.type() != from.type()) {
+ return true;
+ }
+ if (!(flags & ExplicitLengthCharacterLHS) && to.type().IsCharacter() &&
+ to.ElementBytes() != from.ElementBytes()) {
+ return true;
+ }
+ if (flags & PolymorphicLHS) {
+ DescriptorAddendum *toAddendum{to.Addendum()};
+ const typeInfo::DerivedType *toDerived{
+ toAddendum ? toAddendum->derivedType() : nullptr};
+ const DescriptorAddendum *fromAddendum{from.Addendum()};
+ const typeInfo::DerivedType *fromDerived{
+ fromAddendum ? fromAddendum->derivedType() : nullptr};
+ if (toDerived != fromDerived) {
+ return true;
+ }
+ if (fromDerived) {
+ // Distinct LEN parameters? Deallocate
+ std::size_t lenParms{fromDerived->LenParameters()};
+ for (std::size_t j{0}; j < lenParms; ++j) {
+ if (toAddendum->LenParameterValue(j) !=
+ fromAddendum->LenParameterValue(j)) {
+ return true;
+ }
+ }
+ }
+ }
+ if (from.rank() > 0) {
+ // Distinct shape? Deallocate
+ int rank{to.rank()};
+ for (int j{0}; j < rank; ++j) {
+ const auto &toDim{to.GetDimension(j)};
+ const auto &fromDim{from.GetDimension(j)};
+ if (toDim.Extent() != fromDim.Extent()) {
+ return true;
+ }
+ if ((flags & UpdateLHSBounds) &&
+ toDim.LowerBound() != fromDim.LowerBound()) {
+ return true;
+ }
+ }
+ }
+ // Not reallocating; may have to update bounds
+ if (flags & UpdateLHSBounds) {
+ int rank{to.rank()};
+ for (int j{0}; j < rank; ++j) {
+ to.GetDimension(j).SetLowerBound(from.GetDimension(j).LowerBound());
+ }
+ }
+ return false;
+}
+
+// Utility: allocate the allocatable left-hand side, either because it was
+// originally deallocated or because it required reallocation
+static RT_API_ATTRS int AllocateAssignmentLHS(
+ Descriptor &to, const Descriptor &from, Terminator &terminator, int flags) {
+ to.raw().type = from.raw().type;
+ if (!(flags & ExplicitLengthCharacterLHS)) {
+ to.raw().elem_len = from.ElementBytes();
+ }
+ const typeInfo::DerivedType *derived{nullptr};
+ DescriptorAddendum *toAddendum{to.Addendum()};
+ if (const DescriptorAddendum * fromAddendum{from.Addendum()}) {
+ derived = fromAddendum->derivedType();
+ if (toAddendum) {
+ toAddendum->set_derivedType(derived);
+ std::size_t lenParms{derived ? derived->LenParameters() : 0};
+ for (std::size_t j{0}; j < lenParms; ++j) {
+ toAddendum->SetLenParameterValue(j, fromAddendum->LenParameterValue(j));
+ }
+ }
+ } else if (toAddendum) {
+ toAddendum->set_derivedType(nullptr);
+ }
+ // subtle: leave bounds in place when "from" is scalar (10.2.1.3(3))
+ int rank{from.rank()};
+ auto stride{static_cast<SubscriptValue>(to.ElementBytes())};
+ for (int j{0}; j < rank; ++j) {
+ auto &toDim{to.GetDimension(j)};
+ const auto &fromDim{from.GetDimension(j)};
+ toDim.SetBounds(fromDim.LowerBound(), fromDim.UpperBound());
+ toDim.SetByteStride(stride);
+ stride *= toDim.Extent();
+ }
+ return ReturnError(terminator, to.Allocate(kNoAsyncObject));
+}
+
+// least <= 0, most >= 0
+static RT_API_ATTRS void MaximalByteOffsetRange(
+ const Descriptor &desc, std::int64_t &least, std::int64_t &most) {
+ least = most = 0;
+ if (desc.ElementBytes() == 0) {
+ return;
+ }
+ int n{desc.raw().rank};
+ for (int j{0}; j < n; ++j) {
+ const auto &dim{desc.GetDimension(j)};
+ auto extent{dim.Extent()};
+ if (extent > 0) {
+ auto sm{dim.ByteStride()};
+ if (sm < 0) {
+ least += (extent - 1) * sm;
+ } else {
+ most += (extent - 1) * sm;
+ }
+ }
+ }
+ most += desc.ElementBytes() - 1;
+}
+
+static inline RT_API_ATTRS bool RangesOverlap(const char *aStart,
+ const char *aEnd, const char *bStart, const char *bEnd) {
+ return aEnd >= bStart && bEnd >= aStart;
+}
+
+// Predicate: could the left-hand and right-hand sides of the assignment
+// possibly overlap in memory? Note that the descriptors themeselves
+// are included in the test.
+static RT_API_ATTRS bool MayAlias(const Descriptor &x, const Descriptor &y) {
+ const char *xBase{x.OffsetElement()};
+ const char *yBase{y.OffsetElement()};
+ if (!xBase || !yBase) {
+ return false; // not both allocated
+ }
+ const char *xDesc{reinterpret_cast<const char *>(&x)};
+ const char *xDescLast{xDesc + x.SizeInBytes() - 1};
+ const char *yDesc{reinterpret_cast<const char *>(&y)};
+ const char *yDescLast{yDesc + y.SizeInBytes() - 1};
+ std::int64_t xLeast, xMost, yLeast, yMost;
+ MaximalByteOffsetRange(x, xLeast, xMost);
+ MaximalByteOffsetRange(y, yLeast, yMost);
+ if (RangesOverlap(xDesc, xDescLast, yBase + yLeast, yBase + yMost) ||
+ RangesOverlap(yDesc, yDescLast, xBase + xLeast, xBase + xMost)) {
+ // A descriptor overlaps with the storage described by the other;
+ // this can arise when an allocatable or pointer component is
+ // being assigned to/from.
+ return true;
+ }
+ if (!RangesOverlap(
+ xBase + xLeast, xBase + xMost, yBase + yLeast, yBase + yMost)) {
+ return false; // no storage overlap
+ }
+ // TODO: check dimensions: if any is independent, return false
+ return true;
+}
+
+static RT_API_ATTRS void DoScalarDefinedAssignment(const Descriptor &to,
+ const Descriptor &from, const typeInfo::DerivedType &derived,
+ const typeInfo::SpecialBinding &special) {
+ bool toIsDesc{special.IsArgDescriptor(0)};
+ bool fromIsDesc{special.IsArgDescriptor(1)};
+ const auto *bindings{
+ derived.binding().OffsetElement<const typeInfo::Binding>()};
+ if (toIsDesc) {
+ if (fromIsDesc) {
+ auto *p{special.GetProc<void (*)(const Descriptor &, const Descriptor &)>(
+ bindings)};
+ p(to, from);
+ } else {
+ auto *p{special.GetProc<void (*)(const Descriptor &, void *)>(bindings)};
+ p(to, from.raw().base_addr);
+ }
+ } else {
+ if (fromIsDesc) {
+ auto *p{special.GetProc<void (*)(void *, const Descriptor &)>(bindings)};
+ p(to.raw().base_addr, from);
+ } else {
+ auto *p{special.GetProc<void (*)(void *, void *)>(bindings)};
+ p(to.raw().base_addr, from.raw().base_addr);
+ }
+ }
+}
+
+static RT_API_ATTRS void DoElementalDefinedAssignment(const Descriptor &to,
+ const Descriptor &from, const typeInfo::DerivedType &derived,
+ const typeInfo::SpecialBinding &special) {
+ SubscriptValue toAt[maxRank], fromAt[maxRank];
+ to.GetLowerBounds(toAt);
+ from.GetLowerBounds(fromAt);
+ StaticDescriptor<maxRank, true, 8 /*?*/> statDesc[2];
+ Descriptor &toElementDesc{statDesc[0].descriptor()};
+ Descriptor &fromElementDesc{statDesc[1].descriptor()};
+ toElementDesc.Establish(derived, nullptr, 0, nullptr, CFI_attribute_pointer);
+ fromElementDesc.Establish(
+ derived, nullptr, 0, nullptr, CFI_attribute_pointer);
+ for (std::size_t toElements{to.InlineElements()}; toElements-- > 0;
+ to.IncrementSubscripts(toAt), from.IncrementSubscripts(fromAt)) {
+ toElementDesc.set_base_addr(to.Element<char>(toAt));
+ fromElementDesc.set_base_addr(from.Element<char>(fromAt));
+ DoScalarDefinedAssignment(toElementDesc, fromElementDesc, derived, special);
+ }
+}
+
+template <typename CHAR>
+static RT_API_ATTRS void BlankPadCharacterAssignment(Descriptor &to,
+ const Descriptor &from, SubscriptValue toAt[], SubscriptValue fromAt[],
+ std::size_t elements, std::size_t toElementBytes,
+ std::size_t fromElementBytes) {
+ std::size_t padding{(toElementBytes - fromElementBytes) / sizeof(CHAR)};
+ std::size_t copiedCharacters{fromElementBytes / sizeof(CHAR)};
+ for (; elements-- > 0;
+ to.IncrementSubscripts(toAt), from.IncrementSubscripts(fromAt)) {
+ CHAR *p{to.Element<CHAR>(toAt)};
+ Fortran::runtime::memmove(
+ p, from.Element<std::add_const_t<CHAR>>(fromAt), fromElementBytes);
+ p += copiedCharacters;
+ for (auto n{padding}; n-- > 0;) {
+ *p++ = CHAR{' '};
+ }
+ }
+}
+
+RT_OFFLOAD_API_GROUP_BEGIN
+
+// Common implementation of assignments, both intrinsic assignments and
+// those cases of polymorphic user-defined ASSIGNMENT(=) TBPs that could not
+// be resolved in semantics. Most assignment statements do not need any
+// of the capabilities of this function -- but when the LHS is allocatable,
+// the type might have a user-defined ASSIGNMENT(=), or the type might be
+// finalizable, this function should be used.
+// When "to" is not a whole allocatable, "from" is an array, and defined
+// assignments are not used, "to" and "from" only need to have the same number
+// of elements, but their shape need not to conform (the assignment is done in
+// element sequence order). This facilitates some internal usages, like when
+// dealing with array constructors.
+RT_API_ATTRS void Assign(Descriptor &to, const Descriptor &from,
+ Terminator &terminator, int flags, MemmoveFct memmoveFct) {
+ WorkQueue workQueue{terminator};
+ if (workQueue.BeginAssign(to, from, flags, memmoveFct, nullptr) ==
+ StatContinue) {
+ workQueue.Run();
+ }
+}
+
+RT_API_ATTRS int AssignTicket::Begin(WorkQueue &workQueue) {
+ bool mustDeallocateLHS{(flags_ & DeallocateLHS) ||
+ MustDeallocateLHS(to_, *from_, workQueue.terminator(), flags_)};
+ DescriptorAddendum *toAddendum{to_.Addendum()};
+ toDerived_ = toAddendum ? toAddendum->derivedType() : nullptr;
+ if (toDerived_ && (flags_ & NeedFinalization) &&
+ toDerived_->noFinalizationNeeded()) {
+ flags_ &= ~NeedFinalization;
+ }
+ if (MayAlias(to_, *from_)) {
+ if (mustDeallocateLHS) {
+ // Convert the LHS into a temporary, then make it look deallocated.
+ toDeallocate_ = &tempDescriptor_.descriptor();
+ persist_ = true; // tempDescriptor_ state must outlive child tickets
+ std::memcpy(
+ reinterpret_cast<void *>(toDeallocate_), &to_, to_.SizeInBytes());
+ to_.set_base_addr(nullptr);
+ if (toDerived_ && (flags_ & NeedFinalization)) {
+ if (int status{workQueue.BeginFinalize(*toDeallocate_, *toDerived_)};
+ status != StatOk && status != StatContinue) {
+ return status;
+ }
+ flags_ &= ~NeedFinalization;
+ }
+ } else if (!IsSimpleMemmove()) {
+ // Handle LHS/RHS aliasing by copying RHS into a temp, then
+ // recursively assigning from that temp.
+ auto descBytes{from_->SizeInBytes()};
+ Descriptor &newFrom{tempDescriptor_.descriptor()};
+ persist_ = true; // tempDescriptor_ state must outlive child tickets
+ std::memcpy(reinterpret_cast<void *>(&newFrom), from_, descBytes);
+ // Pretend the temporary descriptor is for an ALLOCATABLE
+ // entity, otherwise, the Deallocate() below will not
+ // free the descriptor memory.
+ newFrom.raw().attribute = CFI_attribute_allocatable;
+ if (int stat{ReturnError(
+ workQueue.terminator(), newFrom.Allocate(kNoAsyncObject))};
+ stat != StatOk) {
+ return stat;
+ }
+ if (HasDynamicComponent(*from_)) {
+ // If 'from' has allocatable/automatic component, we cannot
+ // just make a shallow copy of the descriptor member.
+ // This will still leave data overlap in 'to' and 'newFrom'.
+ // For example:
+ // type t
+ // character, allocatable :: c(:)
+ // end type t
+ // type(t) :: x(3)
+ // x(2:3) = x(1:2)
+ // We have to make a deep copy into 'newFrom' in this case.
+ if (const DescriptorAddendum *addendum{newFrom.Addendum()}) {
+ if (const auto *derived{addendum->derivedType()}) {
+ if (!derived->noInitializationNeeded()) {
+ if (int status{workQueue.BeginInitialize(newFrom, *derived)};
+ status != StatOk && status != StatContinue) {
+ return status;
+ }
+ }
+ }
+ }
+ static constexpr int nestedFlags{MaybeReallocate | PolymorphicLHS};
+ if (int status{workQueue.BeginAssign(
+ newFrom, *from_, nestedFlags, memmoveFct_, nullptr)};
+ status != StatOk && status != StatContinue) {
+ return status;
+ }
+ } else {
+ ShallowCopy(newFrom, *from_, true, from_->IsContiguous());
+ }
+ from_ = &newFrom; // this is why from_ has to be a pointer
+ flags_ &= NeedFinalization | ComponentCanBeDefinedAssignment |
+ ExplicitLengthCharacterLHS | CanBeDefinedAssignment;
+ toDeallocate_ = &newFrom;
+ }
+ }
+ if (to_.IsAllocatable()) {
+ if (mustDeallocateLHS) {
+ if (!toDeallocate_ && to_.IsAllocated()) {
+ toDeallocate_ = &to_;
+ }
+ } else if (to_.rank() != from_->rank() && !to_.IsAllocated()) {
+ workQueue.terminator().Crash("Assign: mismatched ranks (%d != %d) in "
+ "assignment to unallocated allocatable",
+ to_.rank(), from_->rank());
+ }
+ } else if (!to_.IsAllocated()) {
+ workQueue.terminator().Crash(
+ "Assign: left-hand side variable is neither allocated nor allocatable");
+ }
+ if (toDerived_ && to_.IsAllocated()) {
+ // Schedule finalization or destruction of the LHS.
+ if (flags_ & NeedFinalization) {
+ if (int status{workQueue.BeginFinalize(to_, *toDerived_)};
+ status != StatOk && status != StatContinue) {
+ return status;
+ }
+ } else if (!toDerived_->noDestructionNeeded()) {
+ if (int status{
+ workQueue.BeginDestroy(to_, *toDerived_, /*finalize=*/false)};
+ status != StatOk && status != StatContinue) {
+ return status;
+ }
+ }
+ }
+ return StatContinue;
+}
+
+RT_API_ATTRS int AssignTicket::Continue(WorkQueue &workQueue) {
+ if (done_) {
+ // All child tickets are complete; can release this ticket's state.
+ if (toDeallocate_) {
+ toDeallocate_->Deallocate();
+ }
+ return StatOk;
+ }
+ // All necessary finalization or destruction that was initiated by Begin()
+ // has been completed. Deallocation may be pending, and if it's for the LHS,
+ // do it now so that the LHS gets reallocated.
+ if (toDeallocate_ == &to_) {
+ toDeallocate_ = nullptr;
+ to_.Deallocate();
+ }
+ // Allocate the LHS if needed
+ if (!to_.IsAllocated()) {
+ if (int stat{
+ AllocateAssignmentLHS(to_, *from_, workQueue.terminator(), flags_)};
+ stat != StatOk) {
+ return stat;
+ }
+ const auto *addendum{to_.Addendum()};
+ toDerived_ = addendum ? addendum->derivedType() : nullptr;
+ if (toDerived_) {
+ if (!toDerived_->noInitializationNeeded()) {
+ if (int status{workQueue.BeginInitialize(to_, *toDerived_)};
+ status != StatOk) {
+ return status;
+ }
+ }
+ }
+ }
+ // Check for a user-defined assignment type-bound procedure;
+ // see 10.2.1.4-5.
+ // Note that the aliasing and LHS (re)allocation handling above
+ // needs to run even with CanBeDefinedAssignment flag, since
+ // Assign() can be invoked recursively for component-wise assignments.
+ // The declared type (if known) must be used for generic resolution
+ // of ASSIGNMENT(=) to a binding, but that binding can be overridden.
+ if (declaredType_ && (flags_ & CanBeDefinedAssignment)) {
+ if (to_.rank() == 0) {
+ if (const auto *special{declaredType_->FindSpecialBinding(
+ typeInfo::SpecialBinding::Which::ScalarAssignment)}) {
+ DoScalarDefinedAssignment(to_, *from_, *toDerived_, *special);
+ done_ = true;
+ return StatContinue;
+ }
+ }
+ if (const auto *special{declaredType_->FindSpecialBinding(
+ typeInfo::SpecialBinding::Which::ElementalAssignment)}) {
+ DoElementalDefinedAssignment(to_, *from_, *toDerived_, *special);
+ done_ = true;
+ return StatContinue;
+ }
+ }
+ // Intrinsic assignment
+ std::size_t toElements{to_.InlineElements()};
+ if (from_->rank() > 0) {
+ std::size_t fromElements{from_->InlineElements()};
+ if (toElements != fromElements) {
+ workQueue.terminator().Crash("Assign: mismatching element counts in "
+ "array assignment (to %zd, from %zd)",
+ toElements, fromElements);
+ }
+ }
+ if (to_.type() != from_->type()) {
+ workQueue.terminator().Crash(
+ "Assign: mismatching types (to code %d != from code %d)",
+ to_.type().raw(), from_->type().raw());
+ }
+ std::size_t toElementBytes{to_.ElementBytes()};
+ std::size_t fromElementBytes{from_->ElementBytes()};
+ if (toElementBytes > fromElementBytes && !to_.type().IsCharacter()) {
+ workQueue.terminator().Crash("Assign: mismatching non-character element "
+ "sizes (to %zd bytes != from %zd bytes)",
+ toElementBytes, fromElementBytes);
+ }
+ if (toDerived_) {
+ if (toDerived_->noDefinedAssignment()) { // componentwise
+ if (int status{workQueue.BeginDerivedAssign<true>(
+ to_, *from_, *toDerived_, flags_, memmoveFct_, toDeallocate_)};
+ status != StatOk && status != StatContinue) {
+ return status;
+ }
+ } else { // elementwise
+ if (int status{workQueue.BeginDerivedAssign<false>(
+ to_, *from_, *toDerived_, flags_, memmoveFct_, toDeallocate_)};
+ status != StatOk && status != StatContinue) {
+ return status;
+ }
+ }
+ toDeallocate_ = nullptr;
+ } else if (IsSimpleMemmove()) {
+ memmoveFct_(to_.raw().base_addr, from_->raw().base_addr,
+ toElements * toElementBytes);
+ } else {
+ // Scalar expansion of the RHS is implied by using the same empty
+ // subscript values on each (seemingly) elemental reference into
+ // "from".
+ SubscriptValue toAt[maxRank];
+ to_.GetLowerBounds(toAt);
+ SubscriptValue fromAt[maxRank];
+ from_->GetLowerBounds(fromAt);
+ if (toElementBytes > fromElementBytes) { // blank padding
+ switch (to_.type().raw()) {
+ case CFI_type_signed_char:
+ case CFI_type_char:
+ BlankPadCharacterAssignment<char>(to_, *from_, toAt, fromAt, toElements,
+ toElementBytes, fromElementBytes);
+ break;
+ case CFI_type_char16_t:
+ BlankPadCharacterAssignment<char16_t>(to_, *from_, toAt, fromAt,
+ toElements, toElementBytes, fromElementBytes);
+ break;
+ case CFI_type_char32_t:
+ BlankPadCharacterAssignment<char32_t>(to_, *from_, toAt, fromAt,
+ toElements, toElementBytes, fromElementBytes);
+ break;
+ default:
+ workQueue.terminator().Crash(
+ "unexpected type code %d in blank padded Assign()",
+ to_.type().raw());
+ }
+ } else { // elemental copies, possibly with character truncation
+ for (std::size_t n{toElements}; n-- > 0;
+ to_.IncrementSubscripts(toAt), from_->IncrementSubscripts(fromAt)) {
+ memmoveFct_(to_.Element<char>(toAt), from_->Element<const char>(fromAt),
+ toElementBytes);
+ }
+ }
+ }
+ if (persist_) {
+ done_ = true;
+ return StatContinue;
+ } else {
+ if (toDeallocate_) {
+ toDeallocate_->Deallocate();
+ toDeallocate_ = nullptr;
+ }
+ return StatOk;
+ }
+}
+
+template <bool IS_COMPONENTWISE>
+RT_API_ATTRS int DerivedAssignTicket<IS_COMPONENTWISE>::Begin(
+ WorkQueue &workQueue) {
+ if (toIsContiguous_ && fromIsContiguous_ &&
+ this->derived_.noDestructionNeeded() &&
+ this->derived_.noDefinedAssignment() &&
+ this->instance_.rank() == this->from_->rank()) {
+ if (std::size_t elementBytes{this->instance_.ElementBytes()};
+ elementBytes == this->from_->ElementBytes()) {
+ // Fastest path. Both LHS and RHS are contiguous, RHS is not a scalar
+ // to be expanded, the types have the same size, and there are no
+ // allocatable components or defined ASSIGNMENT(=) at any level.
+ memmoveFct_(this->instance_.template OffsetElement<char>(),
+ this->from_->template OffsetElement<const char *>(),
+ this->instance_.InlineElements() * elementBytes);
+ return StatOk;
+ }
+ }
+ // Use PolymorphicLHS for components so that the right things happen
+ // when the components are polymorphic; when they're not, they're both
+ // not, and their declared types will match.
+ int nestedFlags{MaybeReallocate | PolymorphicLHS};
+ if (flags_ & ComponentCanBeDefinedAssignment) {
+ nestedFlags |= CanBeDefinedAssignment | ComponentCanBeDefinedAssignment;
+ }
+ flags_ = nestedFlags;
+ // Copy procedure pointer components
+ const Descriptor &procPtrDesc{this->derived_.procPtr()};
+ bool noDataComponents{this->IsComplete()};
+ if (std::size_t numProcPtrs{procPtrDesc.InlineElements()}) {
+ for (std::size_t k{0}; k < numProcPtrs; ++k) {
+ const auto &procPtr{
+ *procPtrDesc.ZeroBasedIndexedElement<typeInfo::ProcPtrComponent>(k)};
+ // Loop only over elements
+ if (k > 0) {
+ Elementwise::Reset();
+ }
+ for (; !Elementwise::IsComplete(); Elementwise::Advance()) {
+ memmoveFct_(this->instance_.template ElementComponent<char>(
+ this->subscripts_, procPtr.offset),
+ this->from_->template ElementComponent<const char>(
+ this->fromSubscripts_, procPtr.offset),
+ sizeof(typeInfo::ProcedurePointer));
+ }
+ }
+ if (noDataComponents) {
+ return StatOk;
+ }
+ Elementwise::Reset();
+ }
+ if (noDataComponents) {
+ return StatOk;
+ }
+ return StatContinue;
+}
+template RT_API_ATTRS int DerivedAssignTicket<false>::Begin(WorkQueue &);
+template RT_API_ATTRS int DerivedAssignTicket<true>::Begin(WorkQueue &);
+
+template <bool IS_COMPONENTWISE>
+RT_API_ATTRS int DerivedAssignTicket<IS_COMPONENTWISE>::Continue(
+ WorkQueue &workQueue) {
+ while (!this->IsComplete()) {
+ // Copy the data components (incl. the parent) first.
+ switch (this->component_->genre()) {
+ case typeInfo::Component::Genre::Data:
+ if (this->component_->category() == TypeCategory::Derived) {
+ Descriptor &toCompDesc{this->componentDescriptor_.descriptor()};
+ Descriptor &fromCompDesc{this->fromComponentDescriptor_.descriptor()};
+ this->component_->CreatePointerDescriptor(toCompDesc, this->instance_,
+ workQueue.terminator(), this->subscripts_);
+ this->component_->CreatePointerDescriptor(fromCompDesc, *this->from_,
+ workQueue.terminator(), this->fromSubscripts_);
+ const auto *componentDerived{this->component_->derivedType()};
+ this->Advance();
+ if (int status{workQueue.BeginAssign(toCompDesc, fromCompDesc, flags_,
+ memmoveFct_, componentDerived)};
+ status != StatOk) {
+ return status;
+ }
+ } else { // Component has intrinsic type; simply copy raw bytes
+ std::size_t componentByteSize{
+ this->component_->SizeInBytes(this->instance_)};
+ if (IS_COMPONENTWISE && toIsContiguous_ && fromIsContiguous_) {
+ std::size_t offset{
+ static_cast<std::size_t>(this->component_->offset())};
+ char *to{this->instance_.template OffsetElement<char>(offset)};
+ const char *from{
+ this->from_->template OffsetElement<const char>(offset)};
+ std::size_t toElementStride{this->instance_.ElementBytes()};
+ std::size_t fromElementStride{
+ this->from_->rank() == 0 ? 0 : this->from_->ElementBytes()};
+ if (toElementStride == fromElementStride &&
+ toElementStride == componentByteSize) {
+ memmoveFct_(to, from, this->elements_ * componentByteSize);
+ } else {
+ for (std::size_t n{this->elements_}; n--;
+ to += toElementStride, from += fromElementStride) {
+ memmoveFct_(to, from, componentByteSize);
+ }
+ }
+ this->SkipToNextComponent();
+ } else {
+ memmoveFct_(
+ this->instance_.template Element<char>(this->subscripts_) +
+ this->component_->offset(),
+ this->from_->template Element<const char>(this->fromSubscripts_) +
+ this->component_->offset(),
+ componentByteSize);
+ this->Advance();
+ }
+ }
+ break;
+ case typeInfo::Component::Genre::Pointer: {
+ std::size_t componentByteSize{
+ this->component_->SizeInBytes(this->instance_)};
+ if (IS_COMPONENTWISE && toIsContiguous_ && fromIsContiguous_) {
+ std::size_t offset{
+ static_cast<std::size_t>(this->component_->offset())};
+ char *to{this->instance_.template OffsetElement<char>(offset)};
+ const char *from{
+ this->from_->template OffsetElement<const char>(offset)};
+ std::size_t toElementStride{this->instance_.ElementBytes()};
+ std::size_t fromElementStride{
+ this->from_->rank() == 0 ? 0 : this->from_->ElementBytes()};
+ if (toElementStride == fromElementStride &&
+ toElementStride == componentByteSize) {
+ memmoveFct_(to, from, this->elements_ * componentByteSize);
+ } else {
+ for (std::size_t n{this->elements_}; n--;
+ to += toElementStride, from += fromElementStride) {
+ memmoveFct_(to, from, componentByteSize);
+ }
+ }
+ this->SkipToNextComponent();
+ } else {
+ memmoveFct_(this->instance_.template Element<char>(this->subscripts_) +
+ this->component_->offset(),
+ this->from_->template Element<const char>(this->fromSubscripts_) +
+ this->component_->offset(),
+ componentByteSize);
+ this->Advance();
+ }
+ } break;
+ case typeInfo::Component::Genre::Allocatable:
+ case typeInfo::Component::Genre::Automatic: {
+ auto *toDesc{reinterpret_cast<Descriptor *>(
+ this->instance_.template Element<char>(this->subscripts_) +
+ this->component_->offset())};
+ const auto *fromDesc{reinterpret_cast<const Descriptor *>(
+ this->from_->template Element<char>(this->fromSubscripts_) +
+ this->component_->offset())};
+ const auto *componentDerived{this->component_->derivedType()};
+ if (toDesc->IsAllocatable() && !fromDesc->IsAllocated()) {
+ if (toDesc->IsAllocated()) {
+ if (this->phase_ == 0) {
+ if (componentDerived && !componentDerived->noDestructionNeeded()) {
+ if (int status{workQueue.BeginDestroy(
+ *toDesc, *componentDerived, /*finalize=*/false)};
+ status != StatOk) {
+ this->phase_++;
+ return status;
+ }
+ }
+ }
+ toDesc->Deallocate();
+ }
+ this->Advance();
+ } else {
+ // Allocatable components of the LHS are unconditionally
+ // deallocated before assignment (F'2018 10.2.1.3(13)(1)),
+ // unlike a "top-level" assignment to a variable, where
+ // deallocation is optional.
+ int nestedFlags{flags_};
+ if (!componentDerived ||
+ (componentDerived->noFinalizationNeeded() &&
+ componentDerived->noInitializationNeeded() &&
+ componentDerived->noDestructionNeeded())) {
+ // The actual deallocation might be avoidable when the existing
+ // location can be reoccupied.
+ nestedFlags |= MaybeReallocate | UpdateLHSBounds;
+ } else {
+ // Force LHS deallocation with DeallocateLHS flag.
+ nestedFlags |= DeallocateLHS;
+ }
+ this->Advance();
+ if (int status{workQueue.BeginAssign(*toDesc, *fromDesc, nestedFlags,
+ memmoveFct_, componentDerived)};
+ status != StatOk) {
+ return status;
+ }
+ }
+ } break;
+ }
+ }
+ if (deallocateAfter_) {
+ deallocateAfter_->Deallocate();
+ }
+ return StatOk;
+}
+template RT_API_ATTRS int DerivedAssignTicket<false>::Continue(WorkQueue &);
+template RT_API_ATTRS int DerivedAssignTicket<true>::Continue(WorkQueue &);
+
+RT_API_ATTRS void DoFromSourceAssign(Descriptor &alloc,
+ const Descriptor &source, Terminator &terminator, MemmoveFct memmoveFct) {
+ if (alloc.rank() > 0 && source.rank() == 0) {
+ // The value of each element of allocate object becomes the value of source.
+ DescriptorAddendum *allocAddendum{alloc.Addendum()};
+ const typeInfo::DerivedType *allocDerived{
+ allocAddendum ? allocAddendum->derivedType() : nullptr};
+ SubscriptValue allocAt[maxRank];
+ alloc.GetLowerBounds(allocAt);
+ if (allocDerived) {
+ for (std::size_t n{alloc.InlineElements()}; n-- > 0;
+ alloc.IncrementSubscripts(allocAt)) {
+ Descriptor allocElement{*Descriptor::Create(*allocDerived,
+ reinterpret_cast<void *>(alloc.Element<char>(allocAt)), 0)};
+ Assign(allocElement, source, terminator, NoAssignFlags, memmoveFct);
+ }
+ } else { // intrinsic type
+ for (std::size_t n{alloc.InlineElements()}; n-- > 0;
+ alloc.IncrementSubscripts(allocAt)) {
+ memmoveFct(alloc.Element<char>(allocAt), source.raw().base_addr,
+ alloc.ElementBytes());
+ }
+ }
+ } else {
+ Assign(alloc, source, terminator, NoAssignFlags, memmoveFct);
+ }
+}
+
+RT_OFFLOAD_API_GROUP_END
+
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+void RTDEF(Assign)(Descriptor &to, const Descriptor &from,
+ const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ // All top-level defined assignments can be recognized in semantics and
+ // will have been already been converted to calls, so don't check for
+ // defined assignment apart from components.
+ Assign(to, from, terminator,
+ MaybeReallocate | NeedFinalization | ComponentCanBeDefinedAssignment);
+}
+
+void RTDEF(AssignTemporary)(Descriptor &to, const Descriptor &from,
+ const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ // Initialize the "to" if it is of derived type that needs initialization.
+ if (const DescriptorAddendum * addendum{to.Addendum()}) {
+ if (const auto *derived{addendum->derivedType()}) {
+ // Do not invoke the initialization, if the descriptor is unallocated.
+ // AssignTemporary() is used for component-by-component assignments,
+ // for example, for structure constructors. This means that the LHS
+ // may be an allocatable component with unallocated status.
+ // The initialization will just fail in this case. By skipping
+ // the initialization we let Assign() automatically allocate
+ // and initialize the component according to the RHS.
+ // So we only need to initialize the LHS here if it is allocated.
+ // Note that initializing already initialized entity has no visible
+ // effect, though, it is assumed that the compiler does not initialize
+ // the temporary and leaves the initialization to this runtime code.
+ if (!derived->noInitializationNeeded() && to.IsAllocated()) {
+ if (ReturnError(terminator, Initialize(to, *derived, terminator)) !=
+ StatOk) {
+ return;
+ }
+ }
+ }
+ }
+ Assign(to, from, terminator, MaybeReallocate | PolymorphicLHS);
+}
+
+void RTDEF(CopyInAssign)(Descriptor &temp, const Descriptor &var,
+ const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ temp = var;
+ temp.set_base_addr(nullptr);
+ temp.raw().attribute = CFI_attribute_allocatable;
+ temp.Allocate(kNoAsyncObject);
+ ShallowCopy(temp, var);
+}
+
+void RTDEF(CopyOutAssign)(
+ Descriptor *var, Descriptor &temp, const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ // Copyout from the temporary must not cause any finalizations
+ // for LHS. The variable must be properly initialized already.
+ if (var) {
+ ShallowCopy(*var, temp);
+ }
+ temp.Deallocate();
+}
+
+void RTDEF(AssignExplicitLengthCharacter)(Descriptor &to,
+ const Descriptor &from, const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ Assign(to, from, terminator,
+ MaybeReallocate | NeedFinalization | ComponentCanBeDefinedAssignment |
+ ExplicitLengthCharacterLHS);
+}
+
+void RTDEF(AssignPolymorphic)(Descriptor &to, const Descriptor &from,
+ const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ Assign(to, from, terminator,
+ MaybeReallocate | NeedFinalization | ComponentCanBeDefinedAssignment |
+ PolymorphicLHS);
+}
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/buffer.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/buffer.cpp
new file mode 100644
index 00000000000..4cf85e13b6d
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/buffer.cpp
@@ -0,0 +1,29 @@
+//===-- lib/runtime/buffer.cpp ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang-rt/runtime/buffer.h"
+#include <algorithm>
+
+namespace Fortran::runtime::io {
+RT_OFFLOAD_API_GROUP_BEGIN
+
+// Here's a very old trick for shifting circular buffer data cheaply
+// without a need for a temporary array.
+void LeftShiftBufferCircularly(
+ char *buffer, std::size_t bytes, std::size_t shift) {
+ // Assume that we start with "efgabcd" and the left shift is 3.
+ RT_DIAG_PUSH
+ RT_DIAG_DISABLE_CALL_HOST_FROM_DEVICE_WARN
+ std::reverse(buffer, buffer + shift); // "gfeabcd"
+ std::reverse(buffer, buffer + bytes); // "dcbaefg"
+ std::reverse(buffer, buffer + bytes - shift); // "abcdefg"
+ RT_DIAG_POP
+}
+
+RT_OFFLOAD_API_GROUP_END
+} // namespace Fortran::runtime::io
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/character.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/character.cpp
new file mode 100644
index 00000000000..f140d202e11
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/character.cpp
@@ -0,0 +1,922 @@
+//===-- lib/runtime/character.cpp -------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang/Runtime/character.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+#include "flang/Common/bit-population-count.h"
+#include "flang/Common/uint128.h"
+#include "flang/Runtime/character.h"
+#include "flang/Runtime/cpp-type.h"
+#include "flang/Runtime/freestanding-tools.h"
+#include <algorithm>
+#include <cstring>
+
+namespace Fortran::runtime {
+
+template <typename CHAR>
+inline RT_API_ATTRS int CompareToBlankPadding(
+ const CHAR *x, std::size_t chars) {
+ using UNSIGNED_CHAR = std::make_unsigned_t<CHAR>;
+ const auto blank{static_cast<UNSIGNED_CHAR>(' ')};
+ for (; chars-- > 0; ++x) {
+ const UNSIGNED_CHAR ux{*reinterpret_cast<const UNSIGNED_CHAR *>(x)};
+ if (ux < blank) {
+ return -1;
+ }
+ if (ux > blank) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+RT_OFFLOAD_API_GROUP_BEGIN
+
+template <typename CHAR>
+RT_API_ATTRS int CharacterScalarCompare(
+ const CHAR *x, const CHAR *y, std::size_t xChars, std::size_t yChars) {
+ auto minChars{std::min(xChars, yChars)};
+ if constexpr (sizeof(CHAR) == 1) {
+ // don't use for kind=2 or =4, that would fail on little-endian machines
+ int cmp{Fortran::runtime::memcmp(x, y, minChars)};
+ if (cmp < 0) {
+ return -1;
+ }
+ if (cmp > 0) {
+ return 1;
+ }
+ if (xChars == yChars) {
+ return 0;
+ }
+ x += minChars;
+ y += minChars;
+ } else {
+ for (std::size_t n{minChars}; n-- > 0; ++x, ++y) {
+ if (*x < *y) {
+ return -1;
+ }
+ if (*x > *y) {
+ return 1;
+ }
+ }
+ }
+ if (int cmp{CompareToBlankPadding(x, xChars - minChars)}) {
+ return cmp;
+ }
+ return -CompareToBlankPadding(y, yChars - minChars);
+}
+
+template RT_API_ATTRS int CharacterScalarCompare<char>(
+ const char *x, const char *y, std::size_t xChars, std::size_t yChars);
+template RT_API_ATTRS int CharacterScalarCompare<char16_t>(const char16_t *x,
+ const char16_t *y, std::size_t xChars, std::size_t yChars);
+template RT_API_ATTRS int CharacterScalarCompare<char32_t>(const char32_t *x,
+ const char32_t *y, std::size_t xChars, std::size_t yChars);
+
+RT_OFFLOAD_API_GROUP_END
+
+// Shift count to use when converting between character lengths
+// and byte counts.
+template <typename CHAR>
+constexpr int shift{common::TrailingZeroBitCount(sizeof(CHAR))};
+
+template <typename CHAR>
+static RT_API_ATTRS void Compare(Descriptor &result, const Descriptor &x,
+ const Descriptor &y, const Terminator &terminator) {
+ RUNTIME_CHECK(
+ terminator, x.rank() == y.rank() || x.rank() == 0 || y.rank() == 0);
+ int rank{std::max(x.rank(), y.rank())};
+ SubscriptValue ub[maxRank], xAt[maxRank], yAt[maxRank];
+ SubscriptValue elements{1};
+ for (int j{0}; j < rank; ++j) {
+ if (x.rank() > 0 && y.rank() > 0) {
+ SubscriptValue xUB{x.GetDimension(j).Extent()};
+ SubscriptValue yUB{y.GetDimension(j).Extent()};
+ if (xUB != yUB) {
+ terminator.Crash("Character array comparison: operands are not "
+ "conforming on dimension %d (%jd != %jd)",
+ j + 1, static_cast<std::intmax_t>(xUB),
+ static_cast<std::intmax_t>(yUB));
+ }
+ ub[j] = xUB;
+ } else {
+ ub[j] = (x.rank() ? x : y).GetDimension(j).Extent();
+ }
+ elements *= ub[j];
+ }
+ x.GetLowerBounds(xAt);
+ y.GetLowerBounds(yAt);
+ result.Establish(
+ TypeCategory::Logical, 1, nullptr, rank, ub, CFI_attribute_allocatable);
+ for (int j{0}; j < rank; ++j) {
+ result.GetDimension(j).SetBounds(1, ub[j]);
+ }
+ if (result.Allocate(kNoAsyncObject) != CFI_SUCCESS) {
+ terminator.Crash("Compare: could not allocate storage for result");
+ }
+ std::size_t xChars{x.ElementBytes() >> shift<CHAR>};
+ std::size_t yChars{y.ElementBytes() >> shift<char>};
+ for (SubscriptValue resultAt{0}; elements-- > 0;
+ ++resultAt, x.IncrementSubscripts(xAt), y.IncrementSubscripts(yAt)) {
+ *result.OffsetElement<char>(resultAt) = CharacterScalarCompare<CHAR>(
+ x.Element<CHAR>(xAt), y.Element<CHAR>(yAt), xChars, yChars);
+ }
+}
+
+template <typename CHAR, bool ADJUSTR>
+static RT_API_ATTRS void Adjust(CHAR *to, const CHAR *from, std::size_t chars) {
+ if constexpr (ADJUSTR) {
+ std::size_t j{chars}, k{chars};
+ for (; k > 0 && from[k - 1] == ' '; --k) {
+ }
+ while (k > 0) {
+ to[--j] = from[--k];
+ }
+ while (j > 0) {
+ to[--j] = ' ';
+ }
+ } else { // ADJUSTL
+ std::size_t j{0}, k{0};
+ for (; k < chars && from[k] == ' '; ++k) {
+ }
+ while (k < chars) {
+ to[j++] = from[k++];
+ }
+ while (j < chars) {
+ to[j++] = ' ';
+ }
+ }
+}
+
+template <typename CHAR, bool ADJUSTR>
+static RT_API_ATTRS void AdjustLRHelper(Descriptor &result,
+ const Descriptor &string, const Terminator &terminator) {
+ int rank{string.rank()};
+ SubscriptValue ub[maxRank], stringAt[maxRank];
+ SubscriptValue elements{1};
+ for (int j{0}; j < rank; ++j) {
+ ub[j] = string.GetDimension(j).Extent();
+ elements *= ub[j];
+ stringAt[j] = 1;
+ }
+ string.GetLowerBounds(stringAt);
+ std::size_t elementBytes{string.ElementBytes()};
+ result.Establish(string.type(), elementBytes, nullptr, rank, ub,
+ CFI_attribute_allocatable);
+ for (int j{0}; j < rank; ++j) {
+ result.GetDimension(j).SetBounds(1, ub[j]);
+ }
+ if (result.Allocate(kNoAsyncObject) != CFI_SUCCESS) {
+ terminator.Crash("ADJUSTL/R: could not allocate storage for result");
+ }
+ for (SubscriptValue resultAt{0}; elements-- > 0;
+ resultAt += elementBytes, string.IncrementSubscripts(stringAt)) {
+ Adjust<CHAR, ADJUSTR>(result.OffsetElement<CHAR>(resultAt),
+ string.Element<const CHAR>(stringAt), elementBytes >> shift<CHAR>);
+ }
+}
+
+template <bool ADJUSTR>
+RT_API_ATTRS void AdjustLR(Descriptor &result, const Descriptor &string,
+ const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ switch (string.raw().type) {
+ case CFI_type_char:
+ AdjustLRHelper<char, ADJUSTR>(result, string, terminator);
+ break;
+ case CFI_type_char16_t:
+ AdjustLRHelper<char16_t, ADJUSTR>(result, string, terminator);
+ break;
+ case CFI_type_char32_t:
+ AdjustLRHelper<char32_t, ADJUSTR>(result, string, terminator);
+ break;
+ default:
+ terminator.Crash("ADJUSTL/R: bad string type code %d",
+ static_cast<int>(string.raw().type));
+ }
+}
+
+template <typename CHAR>
+inline RT_API_ATTRS std::size_t LenTrim(const CHAR *x, std::size_t chars) {
+ while (chars > 0 && x[chars - 1] == ' ') {
+ --chars;
+ }
+ return chars;
+}
+
+template <typename INT, typename CHAR>
+static RT_API_ATTRS void LenTrim(Descriptor &result, const Descriptor &string,
+ const Terminator &terminator) {
+ int rank{string.rank()};
+ SubscriptValue ub[maxRank], stringAt[maxRank];
+ SubscriptValue elements{1};
+ for (int j{0}; j < rank; ++j) {
+ ub[j] = string.GetDimension(j).Extent();
+ elements *= ub[j];
+ }
+ string.GetLowerBounds(stringAt);
+ result.Establish(TypeCategory::Integer, sizeof(INT), nullptr, rank, ub,
+ CFI_attribute_allocatable);
+ for (int j{0}; j < rank; ++j) {
+ result.GetDimension(j).SetBounds(1, ub[j]);
+ }
+ if (result.Allocate(kNoAsyncObject) != CFI_SUCCESS) {
+ terminator.Crash("LEN_TRIM: could not allocate storage for result");
+ }
+ std::size_t stringElementChars{string.ElementBytes() >> shift<CHAR>};
+ for (SubscriptValue resultAt{0}; elements-- > 0;
+ resultAt += sizeof(INT), string.IncrementSubscripts(stringAt)) {
+ *result.OffsetElement<INT>(resultAt) =
+ LenTrim(string.Element<CHAR>(stringAt), stringElementChars);
+ }
+}
+
+template <typename CHAR>
+static RT_API_ATTRS void LenTrimKind(Descriptor &result,
+ const Descriptor &string, int kind, const Terminator &terminator) {
+ switch (kind) {
+ case 1:
+ LenTrim<CppTypeFor<TypeCategory::Integer, 1>, CHAR>(
+ result, string, terminator);
+ break;
+ case 2:
+ LenTrim<CppTypeFor<TypeCategory::Integer, 2>, CHAR>(
+ result, string, terminator);
+ break;
+ case 4:
+ LenTrim<CppTypeFor<TypeCategory::Integer, 4>, CHAR>(
+ result, string, terminator);
+ break;
+ case 8:
+ LenTrim<CppTypeFor<TypeCategory::Integer, 8>, CHAR>(
+ result, string, terminator);
+ break;
+ case 16:
+ LenTrim<CppTypeFor<TypeCategory::Integer, 16>, CHAR>(
+ result, string, terminator);
+ break;
+ default:
+ terminator.Crash(
+ "not yet implemented: CHARACTER(KIND=%d) in LEN_TRIM intrinsic", kind);
+ }
+}
+
+// INDEX implementation
+template <typename CHAR>
+inline RT_API_ATTRS std::size_t Index(const CHAR *x, std::size_t xLen,
+ const CHAR *want, std::size_t wantLen, bool back) {
+ if (xLen < wantLen) {
+ return 0;
+ }
+ if (xLen == 0) {
+ return 1; // wantLen is also 0, so trivial match
+ }
+ if (back) {
+ // If wantLen==0, returns xLen + 1 per standard (and all other compilers)
+ std::size_t at{xLen - wantLen + 1};
+ for (; at > 0; --at) {
+ std::size_t j{1};
+ for (; j <= wantLen; ++j) {
+ if (x[at + j - 2] != want[j - 1]) {
+ break;
+ }
+ }
+ if (j > wantLen) {
+ return at;
+ }
+ }
+ return 0;
+ }
+ if (wantLen == 1) {
+ // Trivial case for single character lookup.
+ // We can use simple forward search.
+ CHAR ch{want[0]};
+ if constexpr (std::is_same_v<CHAR, char>) {
+ if (auto pos{reinterpret_cast<const CHAR *>(
+ Fortran::runtime::memchr(x, ch, xLen))}) {
+ return pos - x + 1;
+ }
+ } else {
+ for (std::size_t at{0}; at < xLen; ++at) {
+ if (x[at] == ch) {
+ return at + 1;
+ }
+ }
+ }
+ return 0;
+ }
+ // Non-trivial forward substring search: use a simplified form of
+ // Boyer-Moore substring searching.
+ for (std::size_t at{1}; at + wantLen - 1 <= xLen;) {
+ // Compare x(at:at+wantLen-1) with want(1:wantLen).
+ // The comparison proceeds from the ends of the substrings forward
+ // so that we can skip ahead by multiple positions on a miss.
+ std::size_t j{wantLen};
+ CHAR ch;
+ for (; j > 0; --j) {
+ ch = x[at + j - 2];
+ if (ch != want[j - 1]) {
+ break;
+ }
+ }
+ if (j == 0) {
+ return at; // found a match
+ }
+ // Suppose we have at==2:
+ // "THAT FORTRAN THAT I RAN" <- the string (x) in which we search
+ // "THAT I RAN" <- the string (want) for which we search
+ // ^------------------ j==7, ch=='T'
+ // We can shift ahead 3 positions to at==5 to align the 'T's:
+ // "THAT FORTRAN THAT I RAN"
+ // "THAT I RAN"
+ std::size_t shift{1};
+ for (; shift < j; ++shift) {
+ if (want[j - shift - 1] == ch) {
+ break;
+ }
+ }
+ at += shift;
+ }
+ return 0;
+}
+
+// SCAN and VERIFY implementation help. These intrinsic functions
+// do pretty much the same thing, so they're templatized with a
+// distinguishing flag.
+
+enum class CharFunc { Index, Scan, Verify };
+
+template <typename CHAR, CharFunc FUNC>
+inline RT_API_ATTRS std::size_t ScanVerify(const CHAR *x, std::size_t xLen,
+ const CHAR *set, std::size_t setLen, bool back) {
+ std::size_t at{back ? xLen : 1};
+ int increment{back ? -1 : 1};
+ for (; xLen-- > 0; at += increment) {
+ CHAR ch{x[at - 1]};
+ bool inSet{false};
+ // TODO: If set is sorted, could use binary search
+ for (std::size_t j{0}; j < setLen; ++j) {
+ if (set[j] == ch) {
+ inSet = true;
+ break;
+ }
+ }
+ if (inSet != (FUNC == CharFunc::Verify)) {
+ return at;
+ }
+ }
+ return 0;
+}
+
+// Specialization for one-byte characters
+template <bool IS_VERIFY = false>
+inline RT_API_ATTRS std::size_t ScanVerify(const char *x, std::size_t xLen,
+ const char *set, std::size_t setLen, bool back) {
+ std::size_t at{back ? xLen : 1};
+ int increment{back ? -1 : 1};
+ if (xLen > 0) {
+ std::uint64_t bitSet[256 / 64]{0};
+ std::uint64_t one{1};
+ for (std::size_t j{0}; j < setLen; ++j) {
+ unsigned setCh{static_cast<unsigned char>(set[j])};
+ bitSet[setCh / 64] |= one << (setCh % 64);
+ }
+ for (; xLen-- > 0; at += increment) {
+ unsigned ch{static_cast<unsigned char>(x[at - 1])};
+ bool inSet{((bitSet[ch / 64] >> (ch % 64)) & 1) != 0};
+ if (inSet != IS_VERIFY) {
+ return at;
+ }
+ }
+ }
+ return 0;
+}
+
+template <typename INT, typename CHAR, CharFunc FUNC>
+static RT_API_ATTRS void GeneralCharFunc(Descriptor &result,
+ const Descriptor &string, const Descriptor &arg, const Descriptor *back,
+ const Terminator &terminator) {
+ int rank{string.rank() ? string.rank()
+ : arg.rank() ? arg.rank()
+ : back ? back->rank()
+ : 0};
+ SubscriptValue ub[maxRank], stringAt[maxRank], argAt[maxRank],
+ backAt[maxRank];
+ SubscriptValue elements{1};
+ for (int j{0}; j < rank; ++j) {
+ ub[j] = string.rank() ? string.GetDimension(j).Extent()
+ : arg.rank() ? arg.GetDimension(j).Extent()
+ : back ? back->GetDimension(j).Extent()
+ : 1;
+ elements *= ub[j];
+ }
+ string.GetLowerBounds(stringAt);
+ arg.GetLowerBounds(argAt);
+ if (back) {
+ back->GetLowerBounds(backAt);
+ }
+ result.Establish(TypeCategory::Integer, sizeof(INT), nullptr, rank, ub,
+ CFI_attribute_allocatable);
+ for (int j{0}; j < rank; ++j) {
+ result.GetDimension(j).SetBounds(1, ub[j]);
+ }
+ if (result.Allocate(kNoAsyncObject) != CFI_SUCCESS) {
+ terminator.Crash("SCAN/VERIFY: could not allocate storage for result");
+ }
+ std::size_t stringElementChars{string.ElementBytes() >> shift<CHAR>};
+ std::size_t argElementChars{arg.ElementBytes() >> shift<CHAR>};
+ for (SubscriptValue resultAt{0}; elements-- > 0; resultAt += sizeof(INT),
+ string.IncrementSubscripts(stringAt), arg.IncrementSubscripts(argAt),
+ back && back->IncrementSubscripts(backAt)) {
+ if constexpr (FUNC == CharFunc::Index) {
+ *result.OffsetElement<INT>(resultAt) =
+ Index<CHAR>(string.Element<CHAR>(stringAt), stringElementChars,
+ arg.Element<CHAR>(argAt), argElementChars,
+ back && IsLogicalElementTrue(*back, backAt));
+ } else if constexpr (FUNC == CharFunc::Scan) {
+ *result.OffsetElement<INT>(resultAt) =
+ ScanVerify<CHAR, CharFunc::Scan>(string.Element<CHAR>(stringAt),
+ stringElementChars, arg.Element<CHAR>(argAt), argElementChars,
+ back && IsLogicalElementTrue(*back, backAt));
+ } else if constexpr (FUNC == CharFunc::Verify) {
+ *result.OffsetElement<INT>(resultAt) =
+ ScanVerify<CHAR, CharFunc::Verify>(string.Element<CHAR>(stringAt),
+ stringElementChars, arg.Element<CHAR>(argAt), argElementChars,
+ back && IsLogicalElementTrue(*back, backAt));
+ } else {
+ static_assert(FUNC == CharFunc::Index || FUNC == CharFunc::Scan ||
+ FUNC == CharFunc::Verify);
+ }
+ }
+}
+
+template <typename CHAR, CharFunc FUNC>
+static RT_API_ATTRS void GeneralCharFuncKind(Descriptor &result,
+ const Descriptor &string, const Descriptor &arg, const Descriptor *back,
+ int kind, const Terminator &terminator) {
+ switch (kind) {
+ case 1:
+ GeneralCharFunc<CppTypeFor<TypeCategory::Integer, 1>, CHAR, FUNC>(
+ result, string, arg, back, terminator);
+ break;
+ case 2:
+ GeneralCharFunc<CppTypeFor<TypeCategory::Integer, 2>, CHAR, FUNC>(
+ result, string, arg, back, terminator);
+ break;
+ case 4:
+ GeneralCharFunc<CppTypeFor<TypeCategory::Integer, 4>, CHAR, FUNC>(
+ result, string, arg, back, terminator);
+ break;
+ case 8:
+ GeneralCharFunc<CppTypeFor<TypeCategory::Integer, 8>, CHAR, FUNC>(
+ result, string, arg, back, terminator);
+ break;
+ case 16:
+ GeneralCharFunc<CppTypeFor<TypeCategory::Integer, 16>, CHAR, FUNC>(
+ result, string, arg, back, terminator);
+ break;
+ default:
+ terminator.Crash("not yet implemented: CHARACTER(KIND=%d) in "
+ "INDEX/SCAN/VERIFY intrinsic",
+ kind);
+ }
+}
+
+template <typename CHAR, bool ISMIN>
+static RT_API_ATTRS void MaxMinHelper(Descriptor &accumulator,
+ const Descriptor &x, const Terminator &terminator) {
+ RUNTIME_CHECK(terminator,
+ accumulator.rank() == 0 || x.rank() == 0 ||
+ accumulator.rank() == x.rank());
+ SubscriptValue ub[maxRank], xAt[maxRank];
+ SubscriptValue elements{1};
+ std::size_t accumChars{accumulator.ElementBytes() >> shift<CHAR>};
+ std::size_t xChars{x.ElementBytes() >> shift<CHAR>};
+ std::size_t chars{std::max(accumChars, xChars)};
+ bool reallocate{accumulator.raw().base_addr == nullptr ||
+ accumChars != chars || (accumulator.rank() == 0 && x.rank() > 0)};
+ int rank{std::max(accumulator.rank(), x.rank())};
+ for (int j{0}; j < rank; ++j) {
+ if (x.rank() > 0) {
+ ub[j] = x.GetDimension(j).Extent();
+ if (accumulator.rank() > 0) {
+ SubscriptValue accumExt{accumulator.GetDimension(j).Extent()};
+ if (accumExt != ub[j]) {
+ terminator.Crash("Character MAX/MIN: operands are not "
+ "conforming on dimension %d (%jd != %jd)",
+ j + 1, static_cast<std::intmax_t>(accumExt),
+ static_cast<std::intmax_t>(ub[j]));
+ }
+ }
+ } else {
+ ub[j] = accumulator.GetDimension(j).Extent();
+ }
+ elements *= ub[j];
+ }
+ x.GetLowerBounds(xAt);
+ void *old{nullptr};
+ const CHAR *accumData{accumulator.OffsetElement<CHAR>()};
+ if (reallocate) {
+ old = accumulator.raw().base_addr;
+ accumulator.set_base_addr(nullptr);
+ accumulator.raw().elem_len = chars << shift<CHAR>;
+ for (int j{0}; j < rank; ++j) {
+ accumulator.GetDimension(j).SetBounds(1, ub[j]);
+ }
+ RUNTIME_CHECK(
+ terminator, accumulator.Allocate(kNoAsyncObject) == CFI_SUCCESS);
+ }
+ for (CHAR *result{accumulator.OffsetElement<CHAR>()}; elements-- > 0;
+ accumData += accumChars, result += chars, x.IncrementSubscripts(xAt)) {
+ const CHAR *xData{x.Element<CHAR>(xAt)};
+ int cmp{CharacterScalarCompare(accumData, xData, accumChars, xChars)};
+ if constexpr (ISMIN) {
+ cmp = -cmp;
+ }
+ if (cmp < 0) {
+ CopyAndPad(result, xData, chars, xChars);
+ } else if (result != accumData) {
+ CopyAndPad(result, accumData, chars, accumChars);
+ }
+ }
+ FreeMemory(old);
+}
+
+template <bool ISMIN>
+static RT_API_ATTRS void MaxMin(Descriptor &accumulator, const Descriptor &x,
+ const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ RUNTIME_CHECK(terminator, accumulator.raw().type == x.raw().type);
+ switch (accumulator.raw().type) {
+ case CFI_type_char:
+ MaxMinHelper<char, ISMIN>(accumulator, x, terminator);
+ break;
+ case CFI_type_char16_t:
+ MaxMinHelper<char16_t, ISMIN>(accumulator, x, terminator);
+ break;
+ case CFI_type_char32_t:
+ MaxMinHelper<char32_t, ISMIN>(accumulator, x, terminator);
+ break;
+ default:
+ terminator.Crash(
+ "Character MAX/MIN: result does not have a character type");
+ }
+}
+
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+void RTDEF(CharacterConcatenate)(Descriptor &accumulator,
+ const Descriptor &from, const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ RUNTIME_CHECK(terminator,
+ accumulator.rank() == 0 || from.rank() == 0 ||
+ accumulator.rank() == from.rank());
+ int rank{std::max(accumulator.rank(), from.rank())};
+ SubscriptValue ub[maxRank], fromAt[maxRank];
+ SubscriptValue elements{1};
+ for (int j{0}; j < rank; ++j) {
+ if (accumulator.rank() > 0 && from.rank() > 0) {
+ ub[j] = accumulator.GetDimension(j).Extent();
+ SubscriptValue fromUB{from.GetDimension(j).Extent()};
+ if (ub[j] != fromUB) {
+ terminator.Crash("Character array concatenation: operands are not "
+ "conforming on dimension %d (%jd != %jd)",
+ j + 1, static_cast<std::intmax_t>(ub[j]),
+ static_cast<std::intmax_t>(fromUB));
+ }
+ } else {
+ ub[j] =
+ (accumulator.rank() ? accumulator : from).GetDimension(j).Extent();
+ }
+ elements *= ub[j];
+ }
+ std::size_t oldBytes{accumulator.ElementBytes()};
+ void *old{accumulator.raw().base_addr};
+ accumulator.set_base_addr(nullptr);
+ std::size_t fromBytes{from.ElementBytes()};
+ accumulator.raw().elem_len += fromBytes;
+ std::size_t newBytes{accumulator.ElementBytes()};
+ for (int j{0}; j < rank; ++j) {
+ accumulator.GetDimension(j).SetBounds(1, ub[j]);
+ }
+ if (accumulator.Allocate(kNoAsyncObject) != CFI_SUCCESS) {
+ terminator.Crash(
+ "CharacterConcatenate: could not allocate storage for result");
+ }
+ const char *p{static_cast<const char *>(old)};
+ char *to{static_cast<char *>(accumulator.raw().base_addr)};
+ from.GetLowerBounds(fromAt);
+ for (; elements-- > 0;
+ to += newBytes, p += oldBytes, from.IncrementSubscripts(fromAt)) {
+ std::memcpy(to, p, oldBytes);
+ std::memcpy(to + oldBytes, from.Element<char>(fromAt), fromBytes);
+ }
+ FreeMemory(old);
+}
+
+void RTDEF(CharacterConcatenateScalar1)(
+ Descriptor &accumulator, const char *from, std::size_t chars) {
+ Terminator terminator{__FILE__, __LINE__};
+ RUNTIME_CHECK(terminator, accumulator.rank() == 0);
+ void *old{accumulator.raw().base_addr};
+ accumulator.set_base_addr(nullptr);
+ std::size_t oldLen{accumulator.ElementBytes()};
+ accumulator.raw().elem_len += chars;
+ RUNTIME_CHECK(
+ terminator, accumulator.Allocate(kNoAsyncObject) == CFI_SUCCESS);
+ std::memcpy(accumulator.OffsetElement<char>(oldLen), from, chars);
+ FreeMemory(old);
+}
+
+int RTDEF(CharacterCompareScalar)(const Descriptor &x, const Descriptor &y) {
+ Terminator terminator{__FILE__, __LINE__};
+ RUNTIME_CHECK(terminator, x.rank() == 0);
+ RUNTIME_CHECK(terminator, y.rank() == 0);
+ RUNTIME_CHECK(terminator, x.raw().type == y.raw().type);
+ switch (x.raw().type) {
+ case CFI_type_char:
+ return CharacterScalarCompare<char>(x.OffsetElement<char>(),
+ y.OffsetElement<char>(), x.ElementBytes(), y.ElementBytes());
+ case CFI_type_char16_t:
+ return CharacterScalarCompare<char16_t>(x.OffsetElement<char16_t>(),
+ y.OffsetElement<char16_t>(), x.ElementBytes() >> 1,
+ y.ElementBytes() >> 1);
+ case CFI_type_char32_t:
+ return CharacterScalarCompare<char32_t>(x.OffsetElement<char32_t>(),
+ y.OffsetElement<char32_t>(), x.ElementBytes() >> 2,
+ y.ElementBytes() >> 2);
+ default:
+ terminator.Crash("CharacterCompareScalar: bad string type code %d",
+ static_cast<int>(x.raw().type));
+ }
+ return 0;
+}
+
+int RTDEF(CharacterCompareScalar1)(
+ const char *x, const char *y, std::size_t xChars, std::size_t yChars) {
+ return CharacterScalarCompare(x, y, xChars, yChars);
+}
+
+int RTDEF(CharacterCompareScalar2)(const char16_t *x, const char16_t *y,
+ std::size_t xChars, std::size_t yChars) {
+ return CharacterScalarCompare(x, y, xChars, yChars);
+}
+
+int RTDEF(CharacterCompareScalar4)(const char32_t *x, const char32_t *y,
+ std::size_t xChars, std::size_t yChars) {
+ return CharacterScalarCompare(x, y, xChars, yChars);
+}
+
+void RTDEF(CharacterCompare)(
+ Descriptor &result, const Descriptor &x, const Descriptor &y) {
+ Terminator terminator{__FILE__, __LINE__};
+ RUNTIME_CHECK(terminator, x.raw().type == y.raw().type);
+ switch (x.raw().type) {
+ case CFI_type_char:
+ Compare<char>(result, x, y, terminator);
+ break;
+ case CFI_type_char16_t:
+ Compare<char16_t>(result, x, y, terminator);
+ break;
+ case CFI_type_char32_t:
+ Compare<char32_t>(result, x, y, terminator);
+ break;
+ default:
+ terminator.Crash("CharacterCompareScalar: bad string type code %d",
+ static_cast<int>(x.raw().type));
+ }
+}
+
+std::size_t RTDEF(CharacterAppend1)(char *lhs, std::size_t lhsBytes,
+ std::size_t offset, const char *rhs, std::size_t rhsBytes) {
+ if (auto n{std::min(lhsBytes - offset, rhsBytes)}) {
+ std::memcpy(lhs + offset, rhs, n);
+ offset += n;
+ }
+ return offset;
+}
+
+void RTDEF(CharacterPad1)(char *lhs, std::size_t bytes, std::size_t offset) {
+ if (bytes > offset) {
+ std::memset(lhs + offset, ' ', bytes - offset);
+ }
+}
+
+// Intrinsic function entry points
+
+void RTDEF(Adjustl)(Descriptor &result, const Descriptor &string,
+ const char *sourceFile, int sourceLine) {
+ AdjustLR<false>(result, string, sourceFile, sourceLine);
+}
+
+void RTDEF(Adjustr)(Descriptor &result, const Descriptor &string,
+ const char *sourceFile, int sourceLine) {
+ AdjustLR<true>(result, string, sourceFile, sourceLine);
+}
+
+std::size_t RTDEF(Index1)(const char *x, std::size_t xLen, const char *set,
+ std::size_t setLen, bool back) {
+ return Index<char>(x, xLen, set, setLen, back);
+}
+std::size_t RTDEF(Index2)(const char16_t *x, std::size_t xLen,
+ const char16_t *set, std::size_t setLen, bool back) {
+ return Index<char16_t>(x, xLen, set, setLen, back);
+}
+std::size_t RTDEF(Index4)(const char32_t *x, std::size_t xLen,
+ const char32_t *set, std::size_t setLen, bool back) {
+ return Index<char32_t>(x, xLen, set, setLen, back);
+}
+
+void RTDEF(Index)(Descriptor &result, const Descriptor &string,
+ const Descriptor &substring, const Descriptor *back, int kind,
+ const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ switch (string.raw().type) {
+ case CFI_type_char:
+ GeneralCharFuncKind<char, CharFunc::Index>(
+ result, string, substring, back, kind, terminator);
+ break;
+ case CFI_type_char16_t:
+ GeneralCharFuncKind<char16_t, CharFunc::Index>(
+ result, string, substring, back, kind, terminator);
+ break;
+ case CFI_type_char32_t:
+ GeneralCharFuncKind<char32_t, CharFunc::Index>(
+ result, string, substring, back, kind, terminator);
+ break;
+ default:
+ terminator.Crash(
+ "INDEX: bad string type code %d", static_cast<int>(string.raw().type));
+ }
+}
+
+std::size_t RTDEF(LenTrim1)(const char *x, std::size_t chars) {
+ return LenTrim(x, chars);
+}
+std::size_t RTDEF(LenTrim2)(const char16_t *x, std::size_t chars) {
+ return LenTrim(x, chars);
+}
+std::size_t RTDEF(LenTrim4)(const char32_t *x, std::size_t chars) {
+ return LenTrim(x, chars);
+}
+
+void RTDEF(LenTrim)(Descriptor &result, const Descriptor &string, int kind,
+ const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ switch (string.raw().type) {
+ case CFI_type_char:
+ LenTrimKind<char>(result, string, kind, terminator);
+ break;
+ case CFI_type_char16_t:
+ LenTrimKind<char16_t>(result, string, kind, terminator);
+ break;
+ case CFI_type_char32_t:
+ LenTrimKind<char32_t>(result, string, kind, terminator);
+ break;
+ default:
+ terminator.Crash("LEN_TRIM: bad string type code %d",
+ static_cast<int>(string.raw().type));
+ }
+}
+
+std::size_t RTDEF(Scan1)(const char *x, std::size_t xLen, const char *set,
+ std::size_t setLen, bool back) {
+ return ScanVerify<char, CharFunc::Scan>(x, xLen, set, setLen, back);
+}
+std::size_t RTDEF(Scan2)(const char16_t *x, std::size_t xLen,
+ const char16_t *set, std::size_t setLen, bool back) {
+ return ScanVerify<char16_t, CharFunc::Scan>(x, xLen, set, setLen, back);
+}
+std::size_t RTDEF(Scan4)(const char32_t *x, std::size_t xLen,
+ const char32_t *set, std::size_t setLen, bool back) {
+ return ScanVerify<char32_t, CharFunc::Scan>(x, xLen, set, setLen, back);
+}
+
+void RTDEF(Scan)(Descriptor &result, const Descriptor &string,
+ const Descriptor &set, const Descriptor *back, int kind,
+ const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ switch (string.raw().type) {
+ case CFI_type_char:
+ GeneralCharFuncKind<char, CharFunc::Scan>(
+ result, string, set, back, kind, terminator);
+ break;
+ case CFI_type_char16_t:
+ GeneralCharFuncKind<char16_t, CharFunc::Scan>(
+ result, string, set, back, kind, terminator);
+ break;
+ case CFI_type_char32_t:
+ GeneralCharFuncKind<char32_t, CharFunc::Scan>(
+ result, string, set, back, kind, terminator);
+ break;
+ default:
+ terminator.Crash(
+ "SCAN: bad string type code %d", static_cast<int>(string.raw().type));
+ }
+}
+
+void RTDEF(Repeat)(Descriptor &result, const Descriptor &string,
+ std::int64_t ncopies, const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ if (ncopies < 0) {
+ terminator.Crash(
+ "REPEAT has negative NCOPIES=%jd", static_cast<std::intmax_t>(ncopies));
+ }
+ std::size_t origBytes{string.ElementBytes()};
+ result.Establish(string.type(), origBytes * ncopies, nullptr, 0, nullptr,
+ CFI_attribute_allocatable);
+ if (result.Allocate(kNoAsyncObject) != CFI_SUCCESS) {
+ terminator.Crash("REPEAT could not allocate storage for result");
+ }
+ const char *from{string.OffsetElement()};
+ for (char *to{result.OffsetElement()}; ncopies-- > 0; to += origBytes) {
+ std::memcpy(to, from, origBytes);
+ }
+}
+
+void RTDEF(Trim)(Descriptor &result, const Descriptor &string,
+ const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ std::size_t resultBytes{0};
+ switch (string.raw().type) {
+ case CFI_type_char:
+ resultBytes =
+ LenTrim(string.OffsetElement<const char>(), string.ElementBytes());
+ break;
+ case CFI_type_char16_t:
+ resultBytes = LenTrim(string.OffsetElement<const char16_t>(),
+ string.ElementBytes() >> 1)
+ << 1;
+ break;
+ case CFI_type_char32_t:
+ resultBytes = LenTrim(string.OffsetElement<const char32_t>(),
+ string.ElementBytes() >> 2)
+ << 2;
+ break;
+ default:
+ terminator.Crash(
+ "TRIM: bad string type code %d", static_cast<int>(string.raw().type));
+ }
+ result.Establish(string.type(), resultBytes, nullptr, 0, nullptr,
+ CFI_attribute_allocatable);
+ RUNTIME_CHECK(terminator, result.Allocate(kNoAsyncObject) == CFI_SUCCESS);
+ std::memcpy(result.OffsetElement(), string.OffsetElement(), resultBytes);
+}
+
+std::size_t RTDEF(Verify1)(const char *x, std::size_t xLen, const char *set,
+ std::size_t setLen, bool back) {
+ return ScanVerify<char, CharFunc::Verify>(x, xLen, set, setLen, back);
+}
+std::size_t RTDEF(Verify2)(const char16_t *x, std::size_t xLen,
+ const char16_t *set, std::size_t setLen, bool back) {
+ return ScanVerify<char16_t, CharFunc::Verify>(x, xLen, set, setLen, back);
+}
+std::size_t RTDEF(Verify4)(const char32_t *x, std::size_t xLen,
+ const char32_t *set, std::size_t setLen, bool back) {
+ return ScanVerify<char32_t, CharFunc::Verify>(x, xLen, set, setLen, back);
+}
+
+void RTDEF(Verify)(Descriptor &result, const Descriptor &string,
+ const Descriptor &set, const Descriptor *back, int kind,
+ const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ switch (string.raw().type) {
+ case CFI_type_char:
+ GeneralCharFuncKind<char, CharFunc::Verify>(
+ result, string, set, back, kind, terminator);
+ break;
+ case CFI_type_char16_t:
+ GeneralCharFuncKind<char16_t, CharFunc::Verify>(
+ result, string, set, back, kind, terminator);
+ break;
+ case CFI_type_char32_t:
+ GeneralCharFuncKind<char32_t, CharFunc::Verify>(
+ result, string, set, back, kind, terminator);
+ break;
+ default:
+ terminator.Crash(
+ "VERIFY: bad string type code %d", static_cast<int>(string.raw().type));
+ }
+}
+
+void RTDEF(CharacterMax)(Descriptor &accumulator, const Descriptor &x,
+ const char *sourceFile, int sourceLine) {
+ MaxMin<false>(accumulator, x, sourceFile, sourceLine);
+}
+
+void RTDEF(CharacterMin)(Descriptor &accumulator, const Descriptor &x,
+ const char *sourceFile, int sourceLine) {
+ MaxMin<true>(accumulator, x, sourceFile, sourceLine);
+}
+
+RT_EXT_API_GROUP_END
+}
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/command.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/command.cpp
new file mode 100644
index 00000000000..a4e8e31ad02
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/command.cpp
@@ -0,0 +1,377 @@
+//===-- lib/runtime/command.cpp ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang/Runtime/command.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/environment.h"
+#include "flang-rt/runtime/stat.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+#include <cerrno>
+#include <cstdlib>
+#include <limits>
+
+#ifdef _WIN32
+#include "flang/Common/windows-include.h"
+#include <direct.h>
+#define getcwd _getcwd
+#define unlink _unlink
+#define PATH_MAX MAX_PATH
+
+#ifdef _MSC_VER
+// On Windows GetCurrentProcessId returns a DWORD aka uint32_t
+#include <processthreadsapi.h>
+inline pid_t getpid() { return GetCurrentProcessId(); }
+#endif
+#else
+#include <unistd.h> //getpid() unlink()
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+#endif
+
+namespace Fortran::runtime {
+std::int32_t RTNAME(ArgumentCount)() {
+ int argc{executionEnvironment.argc};
+ if (argc > 1) {
+ // C counts the command name as one of the arguments, but Fortran doesn't.
+ return argc - 1;
+ }
+ return 0;
+}
+
+pid_t RTNAME(GetPID)() { return getpid(); }
+
+// Returns the length of the \p string. Assumes \p string is valid.
+static std::int64_t StringLength(const char *string) {
+ std::size_t length{std::strlen(string)};
+ if (length <= std::numeric_limits<std::int64_t>::max())
+ return static_cast<std::int64_t>(length);
+ return 0;
+}
+
+static void FillWithSpaces(const Descriptor &value, std::size_t offset = 0) {
+ if (offset < value.ElementBytes()) {
+ std::memset(
+ value.OffsetElement(offset), ' ', value.ElementBytes() - offset);
+ }
+}
+
+static std::int32_t CheckAndCopyCharsToDescriptor(const Descriptor *value,
+ const char *rawValue, const Descriptor *errmsg, std::size_t &offset) {
+ bool haveValue{IsValidCharDescriptor(value)};
+
+ std::int64_t len{StringLength(rawValue)};
+ if (len <= 0) {
+ if (haveValue) {
+ FillWithSpaces(*value);
+ }
+ return ToErrmsg(errmsg, StatMissingArgument);
+ }
+
+ std::int32_t stat{StatOk};
+ if (haveValue) {
+ stat = CopyCharsToDescriptor(*value, rawValue, len, errmsg, offset);
+ }
+
+ offset += len;
+ return stat;
+}
+
+template <int KIND> struct FitsInIntegerKind {
+ bool operator()([[maybe_unused]] std::int64_t value) {
+ if constexpr (KIND >= 8) {
+ return true;
+ } else {
+ return value <= std::numeric_limits<Fortran::runtime::CppTypeFor<
+ Fortran::common::TypeCategory::Integer, KIND>>::max();
+ }
+ }
+};
+
+static bool FitsInDescriptor(
+ const Descriptor *length, std::int64_t value, Terminator &terminator) {
+ auto typeCode{length->type().GetCategoryAndKind()};
+ int kind{typeCode->second};
+ return Fortran::runtime::ApplyIntegerKind<FitsInIntegerKind, bool>(
+ kind, terminator, value);
+}
+
+std::int32_t RTNAME(GetCommandArgument)(std::int32_t n, const Descriptor *value,
+ const Descriptor *length, const Descriptor *errmsg, const char *sourceFile,
+ int line) {
+ Terminator terminator{sourceFile, line};
+
+ if (value) {
+ RUNTIME_CHECK(terminator, IsValidCharDescriptor(value));
+ FillWithSpaces(*value);
+ }
+
+ // Store 0 in case we error out later on.
+ if (length) {
+ RUNTIME_CHECK(terminator, IsValidIntDescriptor(length));
+ StoreIntToDescriptor(length, 0, terminator);
+ }
+
+ if (n < 0 || n >= executionEnvironment.argc) {
+ return ToErrmsg(errmsg, StatInvalidArgumentNumber);
+ }
+
+ const char *arg{executionEnvironment.argv[n]};
+ std::int64_t argLen{StringLength(arg)};
+ if (argLen <= 0) {
+ return ToErrmsg(errmsg, StatMissingArgument);
+ }
+
+ if (length && FitsInDescriptor(length, argLen, terminator)) {
+ StoreIntToDescriptor(length, argLen, terminator);
+ }
+
+ if (value) {
+ return CopyCharsToDescriptor(*value, arg, argLen, errmsg);
+ }
+
+ return StatOk;
+}
+
+std::int32_t RTNAME(GetCommand)(const Descriptor *value,
+ const Descriptor *length, const Descriptor *errmsg, const char *sourceFile,
+ int line) {
+ Terminator terminator{sourceFile, line};
+
+ if (value) {
+ RUNTIME_CHECK(terminator, IsValidCharDescriptor(value));
+ }
+
+ // Store 0 in case we error out later on.
+ if (length) {
+ RUNTIME_CHECK(terminator, IsValidIntDescriptor(length));
+ StoreIntToDescriptor(length, 0, terminator);
+ }
+
+ auto shouldContinue = [&](std::int32_t stat) -> bool {
+ // We continue as long as everything is ok OR the value descriptor is
+ // too short, but we still need to compute the length.
+ return stat == StatOk || (length && stat == StatValueTooShort);
+ };
+
+ std::size_t offset{0};
+
+ if (executionEnvironment.argc == 0) {
+ return CheckAndCopyCharsToDescriptor(value, "", errmsg, offset);
+ }
+
+ // value = argv[0]
+ std::int32_t stat{CheckAndCopyCharsToDescriptor(
+ value, executionEnvironment.argv[0], errmsg, offset)};
+ if (!shouldContinue(stat)) {
+ return stat;
+ }
+
+ // value += " " + argv[1:n]
+ for (std::int32_t i{1}; i < executionEnvironment.argc; ++i) {
+ stat = CheckAndCopyCharsToDescriptor(value, " ", errmsg, offset);
+ if (!shouldContinue(stat)) {
+ return stat;
+ }
+
+ stat = CheckAndCopyCharsToDescriptor(
+ value, executionEnvironment.argv[i], errmsg, offset);
+ if (!shouldContinue(stat)) {
+ return stat;
+ }
+ }
+
+ if (length && FitsInDescriptor(length, offset, terminator)) {
+ StoreIntToDescriptor(length, offset, terminator);
+ }
+
+ // value += spaces for padding
+ if (value) {
+ FillWithSpaces(*value, offset);
+ }
+
+ return stat;
+}
+
+static std::size_t LengthWithoutTrailingSpaces(const Descriptor &d) {
+ std::size_t s{d.ElementBytes()}; // This can be 0.
+ while (s != 0 && *d.OffsetElement(s - 1) == ' ') {
+ --s;
+ }
+ return s;
+}
+
+std::int32_t RTNAME(GetEnvVariable)(const Descriptor &name,
+ const Descriptor *value, const Descriptor *length, bool trim_name,
+ const Descriptor *errmsg, const char *sourceFile, int line) {
+ Terminator terminator{sourceFile, line};
+
+ if (value) {
+ RUNTIME_CHECK(terminator, IsValidCharDescriptor(value));
+ FillWithSpaces(*value);
+ }
+
+ // Store 0 in case we error out later on.
+ if (length) {
+ RUNTIME_CHECK(terminator, IsValidIntDescriptor(length));
+ StoreIntToDescriptor(length, 0, terminator);
+ }
+
+ const char *rawValue{nullptr};
+ std::size_t nameLength{
+ trim_name ? LengthWithoutTrailingSpaces(name) : name.ElementBytes()};
+ if (nameLength != 0) {
+ rawValue = executionEnvironment.GetEnv(
+ name.OffsetElement(), nameLength, terminator);
+ }
+ if (!rawValue) {
+ return ToErrmsg(errmsg, StatMissingEnvVariable);
+ }
+
+ std::int64_t varLen{StringLength(rawValue)};
+ if (length && FitsInDescriptor(length, varLen, terminator)) {
+ StoreIntToDescriptor(length, varLen, terminator);
+ }
+
+ if (value) {
+ return CopyCharsToDescriptor(*value, rawValue, varLen, errmsg);
+ }
+ return StatOk;
+}
+
+std::int32_t RTNAME(GetCwd)(
+ const Descriptor &cwd, const char *sourceFile, int line) {
+ Terminator terminator{sourceFile, line};
+
+ RUNTIME_CHECK(terminator, IsValidCharDescriptor(&cwd));
+
+ char *buf{(char *)AllocateMemoryOrCrash(terminator, PATH_MAX)};
+
+ if (!getcwd(buf, PATH_MAX)) {
+ return StatMissingCurrentWorkDirectory;
+ }
+
+ std::int64_t strLen{StringLength(buf)};
+ std::int32_t status{CopyCharsToDescriptor(cwd, buf, strLen)};
+
+ std::free(buf);
+ return status;
+}
+
+std::int32_t RTNAME(Hostnm)(
+ const Descriptor &res, const char *sourceFile, int line) {
+ Terminator terminator{sourceFile, line};
+
+ RUNTIME_CHECK(terminator, IsValidCharDescriptor(&res));
+
+ char buf[256];
+ std::int32_t status{0};
+
+ // Fill the output with spaces. Upon success, CopyCharsToDescriptor()
+ // will overwrite part of the string with the result, so we'll end up
+ // with a padded string. If we fail to obtain the host name, we return
+ // the string of all spaces, which is the original gfortran behavior.
+ FillWithSpaces(res);
+
+#ifdef _WIN32
+
+ DWORD dwSize{sizeof(buf)};
+
+ // Note: Winsock has gethostname(), but use Win32 API GetComputerNameEx(),
+ // in order to avoid adding dependency on Winsock.
+ if (!GetComputerNameExA(ComputerNameDnsHostname, buf, &dwSize)) {
+ status = GetLastError();
+ }
+
+#else
+
+ if (gethostname(buf, sizeof(buf)) < 0) {
+ status = errno;
+ }
+
+#endif
+
+ if (status == 0) {
+ std::int64_t strLen{StringLength(buf)};
+ status = CopyCharsToDescriptor(res, buf, strLen);
+
+ // Note: if the result string is too short, then we'll return partial
+ // host name with "too short" error status.
+ }
+
+ return status;
+}
+
+std::int32_t RTNAME(PutEnv)(
+ const char *str, size_t str_length, const char *sourceFile, int line) {
+ Terminator terminator{sourceFile, line};
+
+ RUNTIME_CHECK(terminator, str && str_length);
+
+ // Note: don't trim the input string, because the user should be able
+ // to set the value to all spaces if necessary.
+
+ // While Fortran's putenv() extended intrinsic sementics loosly follow
+ // Linux C library putenv(), don't actually use putenv() on Linux, because
+ // it takes the passed string pointer and incorporates it into the
+ // environment without copy. To make this safe, one would have to copy
+ // the passed string into some allocated memory, but then there's no good
+ // way to deallocate it. Instead, use the implementation from
+ // ExecutionEnvironment, which does the right thing for both Windows and
+ // Linux.
+
+ std::int32_t status{0};
+
+ // Split the input string into name and value substrings. Note:
+ // if input string is in "name=value" form, then we set variable "name" with
+ // value "value". If the input string is in "name=" form, then we delete
+ // the variable "name".
+
+ const char *str_end = str + str_length;
+ const char *str_sep = std::find(str, str_end, '=');
+ if (str_sep == str_end) {
+ // No separator, invalid input string
+ status = EINVAL;
+ } else if ((str_sep + 1) == str_end) {
+ // "name=" form, which means we need to delete this variable
+ status = executionEnvironment.UnsetEnv(str, str_sep - str, terminator);
+ } else {
+ // Example: consider str "abc=defg", str_length = 8
+ //
+ // addr: 05 06 07 08 09 10 11 12 13
+ // str@addr: a b c = d e f g ??
+ //
+ // str = 5, str_end = 13, str_sep = 8, name length: str_sep - str = 3
+ // value ptr: str_sep + 1 = 9, value length: 4
+ //
+ status = executionEnvironment.SetEnv(
+ str, str_sep - str, str_sep + 1, str_end - str_sep - 1, terminator);
+ }
+
+ return status;
+}
+
+std::int32_t RTNAME(Unlink)(
+ const char *str, size_t strLength, const char *sourceFile, int line) {
+ Terminator terminator{sourceFile, line};
+
+ auto pathLength = TrimTrailingSpaces(str, strLength);
+ auto path = SaveDefaultCharacter(str, pathLength, terminator);
+
+ std::int32_t status{0};
+
+ if (unlink(path.get()) != 0) {
+ status = errno;
+ }
+
+ return status;
+}
+
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/complex-powi.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/complex-powi.cpp
new file mode 100644
index 00000000000..a561d114591
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/complex-powi.cpp
@@ -0,0 +1,171 @@
+//===-- lib/runtime/complex-powi.cpp ----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang/Common/float128.h"
+#include "flang/Runtime/cpp-type.h"
+#include "flang/Runtime/entry-names.h"
+#include <cstdint>
+#include <cstdio>
+#include <limits>
+
+namespace Fortran::runtime {
+#ifdef __clang_major__
+#pragma clang diagnostic ignored "-Wc99-extensions"
+#endif
+
+template <typename C, typename I> C tgpowi(C base, I exp) {
+ if (exp == 0) {
+ return C{1};
+ }
+
+ bool invertResult{exp < 0};
+ bool isMin{exp == std::numeric_limits<I>::min()};
+
+ if (isMin) {
+ exp = std::numeric_limits<I>::max();
+ }
+
+ if (exp < 0) {
+ exp = exp * -1;
+ }
+
+ C origBase{base};
+
+ while ((exp & 1) == 0) {
+ base *= base;
+ exp >>= 1;
+ }
+
+ C acc{base};
+
+ while (exp > 1) {
+ exp >>= 1;
+ base *= base;
+ if ((exp & 1) == 1) {
+ acc *= base;
+ }
+ }
+
+ if (isMin) {
+ acc *= origBase;
+ }
+
+ if (invertResult) {
+ acc = C{1} / acc;
+ }
+
+ return acc;
+}
+
+#ifndef _MSC_VER
+// With most compilers, C complex is implemented as a builtin type that may have
+// specific ABI requirements
+extern "C" float _Complex RTNAME(cpowi)(float _Complex base, std::int32_t exp) {
+ return tgpowi(base, exp);
+}
+
+extern "C" double _Complex RTNAME(zpowi)(
+ double _Complex base, std::int32_t exp) {
+ return tgpowi(base, exp);
+}
+
+extern "C" float _Complex RTNAME(cpowk)(float _Complex base, std::int64_t exp) {
+ return tgpowi(base, exp);
+}
+
+extern "C" double _Complex RTNAME(zpowk)(
+ double _Complex base, std::int64_t exp) {
+ return tgpowi(base, exp);
+}
+
+#if HAS_LDBL128 || HAS_FLOAT128
+// Duplicate CFloat128ComplexType definition from flang/Common/float128.h.
+// float128.h does not define it for C++, because _Complex triggers
+// c99-extension warnings. We decided to disable warnings for this
+// particular file, so we can use _Complex here.
+#if HAS_LDBL128
+typedef long double _Complex Qcomplex;
+#elif HAS_FLOAT128
+#if !defined(_ARCH_PPC) || defined(__LONG_DOUBLE_IEEE128__)
+typedef _Complex float __attribute__((mode(TC))) Qcomplex;
+#else
+typedef _Complex float __attribute__((mode(KC))) Qcomplex;
+#endif
+#endif
+
+extern "C" Qcomplex RTNAME(cqpowi)(Qcomplex base, std::int32_t exp) {
+ return tgpowi(base, exp);
+}
+extern "C" Qcomplex RTNAME(cqpowk)(Qcomplex base, std::int64_t exp) {
+ return tgpowi(base, exp);
+}
+#endif
+
+#else
+// on MSVC, C complex is always just a struct of two members as it is not
+// supported as a builtin type. So we use C++ complex here as that has the
+// same ABI and layout. See:
+// https://learn.microsoft.com/en-us/cpp/c-runtime-library/complex-math-support
+#include <complex>
+
+// MSVC doesn't allow including <ccomplex> or <complex.h> in C++17 mode to get
+// the Windows definitions of these structs so just redefine here.
+struct Fcomplex {
+ CppTypeFor<TypeCategory::Real, 4> re;
+ CppTypeFor<TypeCategory::Real, 4> im;
+};
+
+struct Dcomplex {
+ CppTypeFor<TypeCategory::Real, 8> re;
+ CppTypeFor<TypeCategory::Real, 8> im;
+};
+
+extern "C" Fcomplex RTNAME(cpowi)(Fcomplex base, std::int32_t exp) {
+ auto cppbase = *(CppTypeFor<TypeCategory::Complex, 4> *)(&base);
+ auto cppres = tgpowi(cppbase, exp);
+ return *(Fcomplex *)(&cppres);
+}
+
+extern "C" Dcomplex RTNAME(zpowi)(Dcomplex base, std::int32_t exp) {
+ auto cppbase = *(CppTypeFor<TypeCategory::Complex, 8> *)(&base);
+ auto cppres = tgpowi(cppbase, exp);
+ return *(Dcomplex *)(&cppres);
+}
+
+extern "C" Fcomplex RTNAME(cpowk)(Fcomplex base, std::int64_t exp) {
+ auto cppbase = *(CppTypeFor<TypeCategory::Complex, 4> *)(&base);
+ auto cppres = tgpowi(cppbase, exp);
+ return *(Fcomplex *)(&cppres);
+}
+
+extern "C" Dcomplex RTNAME(zpowk)(Dcomplex base, std::int64_t exp) {
+ auto cppbase = *(CppTypeFor<TypeCategory::Complex, 8> *)(&base);
+ auto cppres = tgpowi(cppbase, exp);
+ return *(Dcomplex *)(&cppres);
+}
+
+#if HAS_LDBL128 || HAS_FLOAT128
+struct Qcomplex {
+ CFloat128Type re;
+ CFloat128Type im;
+};
+
+extern "C" Dcomplex RTNAME(cqpowi)(Qcomplex base, std::int32_t exp) {
+ auto cppbase = *(rtcmplx::complex<CFloat128Type> *)(&base);
+ auto cppres = tgpowi(cppbase, exp);
+ return *(Qcomplex *)(&cppres);
+}
+
+extern "C" Dcomplex RTNAME(cqpowk)(Qcomplex base, std::int64_t exp) {
+ auto cppbase = *(rtcmplx::complex<CFloat128Type> *)(&base);
+ auto cppres = tgpowi(cppbase, exp);
+ return *(Qcomplex *)(&cppres);
+}
+#endif
+#endif
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/complex-reduction.c b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/complex-reduction.c
new file mode 100644
index 00000000000..967f26c05e7
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/complex-reduction.c
@@ -0,0 +1,194 @@
+/*===-- lib/flang_rt/complex-reduction.c ----------------------------*- C -*-===
+ *
+ * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+ * See https://llvm.org/LICENSE.txt for license information.
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ *
+ *===----------------------------------------------------------------------===*/
+
+#include "complex-reduction.h"
+#include <float.h>
+
+struct CppComplexFloat {
+ float r, i;
+};
+struct CppComplexDouble {
+ double r, i;
+};
+struct CppComplexLongDouble {
+ long double r, i;
+};
+#if HAS_LDBL128 || HAS_FLOAT128
+struct CppComplexFloat128 {
+ CFloat128Type r, i;
+};
+#endif
+
+/* Not all environments define CMPLXF, CMPLX, CMPLXL. */
+
+#ifndef CMPLXF
+#if defined(__clang_major__) && (__clang_major__ >= 12)
+#define CMPLXF __builtin_complex
+#else
+static float_Complex_t CMPLXF(float r, float i) {
+ union {
+ struct CppComplexFloat x;
+ float_Complex_t result;
+ } u;
+ u.x.r = r;
+ u.x.i = i;
+ return u.result;
+}
+#endif
+#endif
+
+#ifndef CMPLX
+#if defined(__clang_major__) && (__clang_major__ >= 12)
+#define CMPLX __builtin_complex
+#else
+static double_Complex_t CMPLX(double r, double i) {
+ union {
+ struct CppComplexDouble x;
+ double_Complex_t result;
+ } u;
+ u.x.r = r;
+ u.x.i = i;
+ return u.result;
+}
+#endif
+#endif
+
+#ifndef CMPLXL
+#if defined(__clang_major__) && (__clang_major__ >= 12)
+#define CMPLXL __builtin_complex
+#else
+static long_double_Complex_t CMPLXL(long double r, long double i) {
+ union {
+ struct CppComplexLongDouble x;
+ long_double_Complex_t result;
+ } u;
+ u.x.r = r;
+ u.x.i = i;
+ return u.result;
+}
+#endif
+#endif
+
+#if HAS_LDBL128 || HAS_FLOAT128
+#ifndef CMPLXF128
+/*
+ * GCC 7.4.0 (currently minimum GCC version for llvm builds)
+ * supports __builtin_complex. For Clang, require >=12.0.
+ * Otherwise, rely on the memory layout compatibility.
+ */
+#if (defined(__clang_major__) && (__clang_major__ >= 12)) || \
+ (defined(__GNUC__) && !defined(__clang__))
+#define CMPLXF128 __builtin_complex
+#else
+static CFloat128ComplexType CMPLXF128(CFloat128Type r, CFloat128Type i) {
+ union {
+ struct CppComplexFloat128 x;
+ CFloat128ComplexType result;
+ } u;
+ u.x.r = r;
+ u.x.i = i;
+ return u.result;
+}
+#endif
+#endif
+#endif
+
+/* RTNAME(SumComplex4) calls RTNAME(CppSumComplex4) with the same arguments
+ * and converts the members of its C++ complex result to C _Complex.
+ */
+
+#define CPP_NAME(name) Cpp##name
+#define ADAPT_REDUCTION(name, cComplex, cpptype, cmplxMacro, ARGS, ARG_NAMES) \
+ struct cpptype RTNAME(CPP_NAME(name))(struct cpptype *, ARGS); \
+ cComplex RTNAME(name)(ARGS) { \
+ struct cpptype result; \
+ RTNAME(CPP_NAME(name))(&result, ARG_NAMES); \
+ return cmplxMacro(result.r, result.i); \
+ }
+
+/* TODO: COMPLEX(2 & 3) */
+
+/* SUM() */
+ADAPT_REDUCTION(SumComplex4, float_Complex_t, CppComplexFloat, CMPLXF,
+ REDUCTION_ARGS, REDUCTION_ARG_NAMES)
+ADAPT_REDUCTION(SumComplex8, double_Complex_t, CppComplexDouble, CMPLX,
+ REDUCTION_ARGS, REDUCTION_ARG_NAMES)
+#if HAS_FLOAT80
+ADAPT_REDUCTION(SumComplex10, long_double_Complex_t, CppComplexLongDouble,
+ CMPLXL, REDUCTION_ARGS, REDUCTION_ARG_NAMES)
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+ADAPT_REDUCTION(SumComplex16, CFloat128ComplexType, CppComplexFloat128,
+ CMPLXF128, REDUCTION_ARGS, REDUCTION_ARG_NAMES)
+#endif
+
+/* PRODUCT() */
+ADAPT_REDUCTION(ProductComplex4, float_Complex_t, CppComplexFloat, CMPLXF,
+ REDUCTION_ARGS, REDUCTION_ARG_NAMES)
+ADAPT_REDUCTION(ProductComplex8, double_Complex_t, CppComplexDouble, CMPLX,
+ REDUCTION_ARGS, REDUCTION_ARG_NAMES)
+#if HAS_FLOAT80
+ADAPT_REDUCTION(ProductComplex10, long_double_Complex_t, CppComplexLongDouble,
+ CMPLXL, REDUCTION_ARGS, REDUCTION_ARG_NAMES)
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+ADAPT_REDUCTION(ProductComplex16, CFloat128ComplexType, CppComplexFloat128,
+ CMPLXF128, REDUCTION_ARGS, REDUCTION_ARG_NAMES)
+#endif
+
+/* DOT_PRODUCT() */
+ADAPT_REDUCTION(DotProductComplex4, float_Complex_t, CppComplexFloat, CMPLXF,
+ DOT_PRODUCT_ARGS, DOT_PRODUCT_ARG_NAMES)
+ADAPT_REDUCTION(DotProductComplex8, double_Complex_t, CppComplexDouble, CMPLX,
+ DOT_PRODUCT_ARGS, DOT_PRODUCT_ARG_NAMES)
+#if HAS_FLOAT80
+ADAPT_REDUCTION(DotProductComplex10, long_double_Complex_t,
+ CppComplexLongDouble, CMPLXL, DOT_PRODUCT_ARGS, DOT_PRODUCT_ARG_NAMES)
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+ADAPT_REDUCTION(DotProductComplex16, CFloat128ComplexType, CppComplexFloat128,
+ CMPLXF128, DOT_PRODUCT_ARGS, DOT_PRODUCT_ARG_NAMES)
+#endif
+
+/* REDUCE() */
+#define RARGS REDUCE_ARGS(float_Complex_t, float_Complex_t_ref_op)
+ADAPT_REDUCTION(ReduceComplex4Ref, float_Complex_t, CppComplexFloat, CMPLXF,
+ RARGS, REDUCE_ARG_NAMES)
+#undef RARGS
+#define RARGS REDUCE_ARGS(float_Complex_t, float_Complex_t_value_op)
+ADAPT_REDUCTION(ReduceComplex4Value, float_Complex_t, CppComplexFloat, CMPLXF,
+ RARGS, REDUCE_ARG_NAMES)
+#undef RARGS
+#define RARGS REDUCE_ARGS(double_Complex_t, double_Complex_t_ref_op)
+ADAPT_REDUCTION(ReduceComplex8Ref, double_Complex_t, CppComplexDouble, CMPLX,
+ RARGS, REDUCE_ARG_NAMES)
+#undef RARGS
+#define RARGS REDUCE_ARGS(double_Complex_t, double_Complex_t_value_op)
+ADAPT_REDUCTION(ReduceComplex8Value, double_Complex_t, CppComplexDouble, CMPLX,
+ RARGS, REDUCE_ARG_NAMES)
+#undef RARGS
+#if HAS_FLOAT80
+#define RARGS REDUCE_ARGS(long_double_Complex_t, long_double_Complex_t_ref_op)
+ADAPT_REDUCTION(ReduceComplex10Ref, long_double_Complex_t, CppComplexLongDouble,
+ CMPLXL, RARGS, REDUCE_ARG_NAMES)
+#undef RARGS
+#define RARGS REDUCE_ARGS(long_double_Complex_t, long_double_Complex_t_value_op)
+ADAPT_REDUCTION(ReduceComplex10Value, long_double_Complex_t,
+ CppComplexLongDouble, CMPLXL, RARGS, REDUCE_ARG_NAMES)
+#undef RARGS
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+#define RARGS REDUCE_ARGS(CFloat128ComplexType, CFloat128ComplexType_ref_op)
+ADAPT_REDUCTION(ReduceComplex16Ref, CFloat128ComplexType, CppComplexFloat128,
+ CMPLXF128, RARGS, REDUCE_ARG_NAMES)
+#undef RARGS
+#define RARGS REDUCE_ARGS(CFloat128ComplexType, CFloat128ComplexType_value_op)
+ADAPT_REDUCTION(ReduceComplex16Value, CFloat128ComplexType, CppComplexFloat128,
+ CMPLXF128, RARGS, REDUCE_ARG_NAMES)
+#undef RARGS
+#endif
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/complex-reduction.h b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/complex-reduction.h
new file mode 100644
index 00000000000..44c52fb02fa
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/complex-reduction.h
@@ -0,0 +1,158 @@
+/*===-- lib/runtime/complex-reduction.h -----------------------------*- C -*-===
+ *
+ * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+ * See https://llvm.org/LICENSE.txt for license information.
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ *
+ *===----------------------------------------------------------------------===*/
+
+/* Wraps the C++-coded complex-valued SUM and PRODUCT reductions with
+ * C-coded wrapper functions returning _Complex values, to avoid problems
+ * with C++ build compilers that don't support C's _Complex.
+ */
+
+#ifndef FLANG_RT_RUNTIME_COMPLEX_REDUCTION_H_
+#define FLANG_RT_RUNTIME_COMPLEX_REDUCTION_H_
+
+#include "flang/Common/float128.h"
+#include "flang/Runtime/entry-names.h"
+#include <complex.h>
+
+struct CppDescriptor; /* dummy type name for Fortran::runtime::Descriptor */
+
+#if defined(_MSC_VER) && !(defined(__clang_major__) && __clang_major__ >= 12)
+typedef _Fcomplex float_Complex_t;
+typedef _Dcomplex double_Complex_t;
+typedef _Lcomplex long_double_Complex_t;
+#else
+typedef float _Complex float_Complex_t;
+typedef double _Complex double_Complex_t;
+typedef long double _Complex long_double_Complex_t;
+#endif
+
+#define REDUCTION_ARGS \
+ const struct CppDescriptor *x, const char *source, int line, int dim /*=0*/, \
+ const struct CppDescriptor *mask /*=NULL*/
+#define REDUCTION_ARG_NAMES x, source, line, dim, mask
+
+float_Complex_t RTNAME(SumComplex2)(REDUCTION_ARGS);
+float_Complex_t RTNAME(SumComplex3)(REDUCTION_ARGS);
+float_Complex_t RTNAME(SumComplex4)(REDUCTION_ARGS);
+double_Complex_t RTNAME(SumComplex8)(REDUCTION_ARGS);
+long_double_Complex_t RTNAME(SumComplex10)(REDUCTION_ARGS);
+#if HAS_LDBL128 || HAS_FLOAT128
+CFloat128ComplexType RTNAME(SumComplex16)(REDUCTION_ARGS);
+#endif
+
+float_Complex_t RTNAME(ProductComplex2)(REDUCTION_ARGS);
+float_Complex_t RTNAME(ProductComplex3)(REDUCTION_ARGS);
+float_Complex_t RTNAME(ProductComplex4)(REDUCTION_ARGS);
+double_Complex_t RTNAME(ProductComplex8)(REDUCTION_ARGS);
+long_double_Complex_t RTNAME(ProductComplex10)(REDUCTION_ARGS);
+#if HAS_LDBL128 || HAS_FLOAT128
+CFloat128ComplexType RTNAME(ProductComplex16)(REDUCTION_ARGS);
+#endif
+
+#define DOT_PRODUCT_ARGS \
+ const struct CppDescriptor *x, const struct CppDescriptor *y, \
+ const char *source, int line, int dim /*=0*/, \
+ const struct CppDescriptor *mask /*=NULL*/
+#define DOT_PRODUCT_ARG_NAMES x, y, source, line, dim, mask
+
+float_Complex_t RTNAME(DotProductComplex2)(DOT_PRODUCT_ARGS);
+float_Complex_t RTNAME(DotProductComplex3)(DOT_PRODUCT_ARGS);
+float_Complex_t RTNAME(DotProductComplex4)(DOT_PRODUCT_ARGS);
+double_Complex_t RTNAME(DotProductComplex8)(DOT_PRODUCT_ARGS);
+long_double_Complex_t RTNAME(DotProductComplex10)(DOT_PRODUCT_ARGS);
+#if HAS_LDBL128 || HAS_FLOAT128
+CFloat128ComplexType RTNAME(DotProductComplex16)(DOT_PRODUCT_ARGS);
+#endif
+
+#define REDUCE_ARGS(T, OP) \
+ OP operation, const struct CppDescriptor *x, const struct CppDescriptor *y, \
+ const char *source, int line, int dim /*=0*/, \
+ const struct CppDescriptor *mask /*=NULL*/, const T *identity /*=NULL*/, \
+ _Bool ordered /*=true*/
+#define REDUCE_ARG_NAMES \
+ operation, x, y, source, line, dim, mask, identity, ordered
+
+typedef float_Complex_t (*float_Complex_t_ref_op)(
+ const float_Complex_t *, const float_Complex_t *);
+typedef float_Complex_t (*float_Complex_t_value_op)(
+ float_Complex_t, float_Complex_t);
+typedef double_Complex_t (*double_Complex_t_ref_op)(
+ const double_Complex_t *, const double_Complex_t *);
+typedef double_Complex_t (*double_Complex_t_value_op)(
+ double_Complex_t, double_Complex_t);
+typedef long_double_Complex_t (*long_double_Complex_t_ref_op)(
+ const long_double_Complex_t *, const long_double_Complex_t *);
+typedef long_double_Complex_t (*long_double_Complex_t_value_op)(
+ long_double_Complex_t, long_double_Complex_t);
+
+float_Complex_t RTNAME(ReduceComplex2Ref)(
+ REDUCE_ARGS(float_Complex_t, float_Complex_t_ref_op));
+float_Complex_t RTNAME(ReduceComplex2Value)(
+ REDUCE_ARGS(float_Complex_t, float_Complex_t_value_op));
+float_Complex_t RTNAME(ReduceComplex3Ref)(
+ REDUCE_ARGS(float_Complex_t, float_Complex_t_ref_op));
+float_Complex_t RTNAME(ReduceComplex3Value)(
+ REDUCE_ARGS(float_Complex_t, float_Complex_t_value_op));
+float_Complex_t RTNAME(ReduceComplex4Ref)(
+ REDUCE_ARGS(float_Complex_t, float_Complex_t_ref_op));
+float_Complex_t RTNAME(ReduceComplex4Value)(
+ REDUCE_ARGS(float_Complex_t, float_Complex_t_value_op));
+double_Complex_t RTNAME(ReduceComplex8Ref)(
+ REDUCE_ARGS(double_Complex_t, double_Complex_t_ref_op));
+double_Complex_t RTNAME(ReduceComplex8Value)(
+ REDUCE_ARGS(double_Complex_t, double_Complex_t_value_op));
+long_double_Complex_t RTNAME(ReduceComplex10Ref)(
+ REDUCE_ARGS(long_double_Complex_t, long_double_Complex_t_ref_op));
+long_double_Complex_t RTNAME(ReduceComplex10Value)(
+ REDUCE_ARGS(long_double_Complex_t, long_double_Complex_t_value_op));
+#if HAS_LDBL128 || HAS_FLOAT128
+typedef CFloat128ComplexType (*CFloat128ComplexType_ref_op)(
+ const CFloat128ComplexType *, const CFloat128ComplexType *);
+typedef CFloat128ComplexType (*CFloat128ComplexType_value_op)(
+ CFloat128ComplexType, CFloat128ComplexType);
+CFloat128ComplexType RTNAME(ReduceComplex16Ref)(
+ REDUCE_ARGS(CFloat128ComplexType, CFloat128ComplexType_ref_op));
+CFloat128ComplexType RTNAME(ReduceComplex16Value)(
+ REDUCE_ARGS(CFloat128ComplexType, CFloat128ComplexType_value_op));
+#endif
+
+#define REDUCE_DIM_ARGS(T, OP) \
+ struct CppDescriptor *result, OP operation, const struct CppDescriptor *x, \
+ const struct CppDescriptor *y, const char *source, int line, int dim, \
+ const struct CppDescriptor *mask /*=NULL*/, const T *identity /*=NULL*/, \
+ _Bool ordered /*=true*/
+#define REDUCE_DIM_ARG_NAMES \
+ result, operation, x, y, source, line, dim, mask, identity, ordered
+
+void RTNAME(ReduceComplex2DimRef)(
+ REDUCE_DIM_ARGS(float_Complex_t, float_Complex_t_ref_op));
+void RTNAME(ReduceComplex2DimValue)(
+ REDUCE_DIM_ARGS(float_Complex_t, float_Complex_t_value_op));
+void RTNAME(ReduceComplex3DimRef)(
+ REDUCE_DIM_ARGS(float_Complex_t, float_Complex_t_ref_op));
+void RTNAME(ReduceComplex3DimValue)(
+ REDUCE_DIM_ARGS(float_Complex_t, float_Complex_t_value_op));
+void RTNAME(ReduceComplex4DimRef)(
+ REDUCE_DIM_ARGS(float_Complex_t, float_Complex_t_ref_op));
+void RTNAME(ReduceComplex4DimValue)(
+ REDUCE_DIM_ARGS(float_Complex_t, float_Complex_t_value_op));
+void RTNAME(ReduceComplex8DimRef)(
+ REDUCE_DIM_ARGS(double_Complex_t, double_Complex_t_ref_op));
+void RTNAME(ReduceComplex8DimValue)(
+ REDUCE_DIM_ARGS(double_Complex_t, double_Complex_t_value_op));
+void RTNAME(ReduceComplex10DimRef)(
+ REDUCE_DIM_ARGS(long_double_Complex_t, long_double_Complex_t_ref_op));
+void RTNAME(ReduceComplex10DimValue)(
+ REDUCE_DIM_ARGS(long_double_Complex_t, long_double_Complex_t_value_op));
+#if HAS_LDBL128 || HAS_FLOAT128
+void RTNAME(ReduceComplex16DimRef)(
+ REDUCE_DIM_ARGS(CFloat128ComplexType, CFloat128ComplexType_ref_op));
+void RTNAME(ReduceComplex16DimValue)(
+ REDUCE_DIM_ARGS(CFloat128ComplexType, CFloat128ComplexType_value_op));
+#endif
+
+#endif // FLANG_RT_RUNTIME_COMPLEX_REDUCTION_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/connection.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/connection.cpp
new file mode 100644
index 00000000000..2e02717f542
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/connection.cpp
@@ -0,0 +1,36 @@
+//===-- lib/runtime/connection.cpp ------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang-rt/runtime/connection.h"
+#include "flang-rt/runtime/environment.h"
+#include "flang-rt/runtime/io-stmt.h"
+
+namespace Fortran::runtime::io {
+RT_OFFLOAD_API_GROUP_BEGIN
+
+SavedPosition::SavedPosition(IoStatementState &io) : io_{io} {
+ ConnectionState &conn{io_.GetConnectionState()};
+ saved_ = conn;
+ conn.pinnedFrame = true;
+}
+
+SavedPosition::~SavedPosition() {
+ if (!cancelled_) {
+ ConnectionState &conn{io_.GetConnectionState()};
+ while (conn.currentRecordNumber > saved_.currentRecordNumber) {
+ io_.BackspaceRecord();
+ }
+ conn.leftTabLimit = saved_.leftTabLimit;
+ conn.furthestPositionInRecord = saved_.furthestPositionInRecord;
+ conn.positionInRecord = saved_.positionInRecord;
+ conn.pinnedFrame = saved_.pinnedFrame;
+ }
+}
+
+RT_OFFLOAD_API_GROUP_END
+} // namespace Fortran::runtime::io
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/copy.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/copy.cpp
new file mode 100644
index 00000000000..f990f46e0be
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/copy.cpp
@@ -0,0 +1,215 @@
+//===-- lib/runtime/copy.cpp ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "copy.h"
+#include "stack.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/type-info.h"
+#include "flang/Runtime/allocatable.h"
+#include <cstring>
+
+namespace Fortran::runtime {
+namespace {
+using StaticDescTy = StaticDescriptor<maxRank, true, 0>;
+
+// A structure describing the data copy that needs to be done
+// from one descriptor to another. It is a helper structure
+// for CopyElement.
+struct CopyDescriptor {
+ // A constructor specifying all members explicitly.
+ // The toAt and fromAt specify subscript storages that might be
+ // external to CopyElement, and cannot be modified.
+ // The copy descriptor only establishes toAtPtr_ and fromAtPtr_
+ // pointers to point to these storages.
+ RT_API_ATTRS CopyDescriptor(const Descriptor &to, const SubscriptValue toAt[],
+ const Descriptor &from, const SubscriptValue fromAt[],
+ std::size_t elements, bool usesStaticDescriptors = false)
+ : to_(to), from_(from), elements_(elements),
+ usesStaticDescriptors_(usesStaticDescriptors) {
+ toAtPtr_ = toAt;
+ fromAtPtr_ = fromAt;
+ }
+ // The number of elements to copy is initialized from the to descriptor.
+ // The current element subscripts are initialized from the lower bounds
+ // of the to and from descriptors.
+ RT_API_ATTRS CopyDescriptor(const Descriptor &to, const Descriptor &from,
+ bool usesStaticDescriptors = false)
+ : to_(to), from_(from), elements_(to.Elements()),
+ usesStaticDescriptors_(usesStaticDescriptors) {
+ to.GetLowerBounds(toAt_);
+ from.GetLowerBounds(fromAt_);
+ }
+
+ // Increment the toAt_ and fromAt_ subscripts to the next
+ // element.
+ RT_API_ATTRS void IncrementSubscripts(Terminator &terminator) {
+ // This method must not be called for copy descriptors
+ // using external non-modifiable subscript storage.
+ RUNTIME_CHECK(terminator, toAt_ == toAtPtr_ && fromAt_ == fromAtPtr_);
+ to_.IncrementSubscripts(toAt_);
+ from_.IncrementSubscripts(fromAt_);
+ }
+
+ // Descriptor of the destination.
+ const Descriptor &to_;
+ // A subscript specifying the current element position to copy to.
+ SubscriptValue toAt_[maxRank];
+ // A pointer to the storage of the 'to' subscript.
+ // It may point to toAt_ or to an external non-modifiable
+ // subscript storage.
+ const SubscriptValue *toAtPtr_{toAt_};
+ // Descriptor of the source.
+ const Descriptor &from_;
+ // A subscript specifying the current element position to copy from.
+ SubscriptValue fromAt_[maxRank];
+ // A pointer to the storage of the 'from' subscript.
+ // It may point to fromAt_ or to an external non-modifiable
+ // subscript storage.
+ const SubscriptValue *fromAtPtr_{fromAt_};
+ // Number of elements left to copy.
+ std::size_t elements_;
+ // Must be true, if the to and from descriptors are allocated
+ // by the CopyElement runtime. The allocated memory belongs
+ // to a separate stack that needs to be popped in correspondence
+ // with popping such a CopyDescriptor node.
+ bool usesStaticDescriptors_;
+};
+
+// A pair of StaticDescTy elements.
+struct StaticDescriptorsPair {
+ StaticDescTy to;
+ StaticDescTy from;
+};
+} // namespace
+
+RT_OFFLOAD_API_GROUP_BEGIN
+
+RT_API_ATTRS void CopyElement(const Descriptor &to, const SubscriptValue toAt[],
+ const Descriptor &from, const SubscriptValue fromAt[],
+ Terminator &terminator) {
+ if (!to.Addendum()) {
+ // Avoid the overhead of creating the work stacks below
+ // for the simple non-derived type cases, because the overhead
+ // might be noticeable over the total amount of work that
+ // needs to be done for the copy.
+ char *toPtr{to.Element<char>(toAt)};
+ char *fromPtr{from.Element<char>(fromAt)};
+ RUNTIME_CHECK(terminator, to.ElementBytes() == from.ElementBytes());
+ std::memcpy(toPtr, fromPtr, to.ElementBytes());
+ return;
+ }
+
+#if !defined(RT_DEVICE_COMPILATION)
+ constexpr unsigned copyStackReserve{16};
+ constexpr unsigned descriptorStackReserve{6};
+#else
+ // Always use dynamic allocation on the device to avoid
+ // big stack sizes. This may be tuned as needed.
+ constexpr unsigned copyStackReserve{0};
+ constexpr unsigned descriptorStackReserve{0};
+#endif
+ // Keep a stack of CopyDescriptor's to avoid recursive calls.
+ Stack<CopyDescriptor, copyStackReserve> copyStack{terminator};
+ // Keep a separate stack of StaticDescTy pairs. These descriptors
+ // may be used for representing copies of Component::Genre::Data
+ // components (since they do not have their descriptors allocated
+ // in memory).
+ Stack<StaticDescriptorsPair, descriptorStackReserve> descriptorsStack{
+ terminator};
+ copyStack.emplace(to, toAt, from, fromAt, /*elements=*/std::size_t{1});
+
+ while (!copyStack.empty()) {
+ CopyDescriptor &currentCopy{copyStack.top()};
+ std::size_t &elements{currentCopy.elements_};
+ if (elements == 0) {
+ // This copy has been exhausted.
+ if (currentCopy.usesStaticDescriptors_) {
+ // Pop the static descriptors, if they were used
+ // for the current copy.
+ descriptorsStack.pop();
+ }
+ copyStack.pop();
+ continue;
+ }
+ const Descriptor &curTo{currentCopy.to_};
+ const SubscriptValue *curToAt{currentCopy.toAtPtr_};
+ const Descriptor &curFrom{currentCopy.from_};
+ const SubscriptValue *curFromAt{currentCopy.fromAtPtr_};
+ char *toPtr{curTo.Element<char>(curToAt)};
+ char *fromPtr{curFrom.Element<char>(curFromAt)};
+ RUNTIME_CHECK(terminator, curTo.ElementBytes() == curFrom.ElementBytes());
+ // TODO: the memcpy can be optimized when both to and from are contiguous.
+ // Moreover, if we came here from an Component::Genre::Data component,
+ // all the per-element copies are redundant, because the parent
+ // has already been copied as a whole.
+ std::memcpy(toPtr, fromPtr, curTo.ElementBytes());
+ --elements;
+ if (elements != 0) {
+ currentCopy.IncrementSubscripts(terminator);
+ }
+
+ // Deep copy allocatable and automatic components if any.
+ if (const auto *addendum{curTo.Addendum()}) {
+ if (const auto *derived{addendum->derivedType()};
+ derived && !derived->noDestructionNeeded()) {
+ RUNTIME_CHECK(terminator,
+ curFrom.Addendum() && derived == curFrom.Addendum()->derivedType());
+ const Descriptor &componentDesc{derived->component()};
+ const typeInfo::Component *component{
+ componentDesc.OffsetElement<typeInfo::Component>()};
+ std::size_t nComponents{componentDesc.Elements()};
+ for (std::size_t j{0}; j < nComponents; ++j, ++component) {
+ if (component->genre() == typeInfo::Component::Genre::Allocatable ||
+ component->genre() == typeInfo::Component::Genre::Automatic) {
+ Descriptor &toDesc{
+ *reinterpret_cast<Descriptor *>(toPtr + component->offset())};
+ if (toDesc.raw().base_addr != nullptr) {
+ toDesc.set_base_addr(nullptr);
+ RUNTIME_CHECK(terminator,
+ toDesc.Allocate(/*asyncObject=*/nullptr) == CFI_SUCCESS);
+ const Descriptor &fromDesc{*reinterpret_cast<const Descriptor *>(
+ fromPtr + component->offset())};
+ copyStack.emplace(toDesc, fromDesc);
+ }
+ } else if (component->genre() == typeInfo::Component::Genre::Data &&
+ component->derivedType() &&
+ !component->derivedType()->noDestructionNeeded()) {
+ SubscriptValue extents[maxRank];
+ const typeInfo::Value *bounds{component->bounds()};
+ std::size_t elements{1};
+ for (int dim{0}; dim < component->rank(); ++dim) {
+ typeInfo::TypeParameterValue lb{
+ bounds[2 * dim].GetValue(&curTo).value_or(0)};
+ typeInfo::TypeParameterValue ub{
+ bounds[2 * dim + 1].GetValue(&curTo).value_or(0)};
+ extents[dim] = ub >= lb ? ub - lb + 1 : 0;
+ elements *= extents[dim];
+ }
+ if (elements != 0) {
+ const typeInfo::DerivedType &compType{*component->derivedType()};
+ // Place a pair of static descriptors onto the descriptors stack.
+ descriptorsStack.emplace();
+ StaticDescriptorsPair &descs{descriptorsStack.top()};
+ Descriptor &toCompDesc{descs.to.descriptor()};
+ toCompDesc.Establish(compType, toPtr + component->offset(),
+ component->rank(), extents);
+ Descriptor &fromCompDesc{descs.from.descriptor()};
+ fromCompDesc.Establish(compType, fromPtr + component->offset(),
+ component->rank(), extents);
+ copyStack.emplace(toCompDesc, fromCompDesc,
+ /*usesStaticDescriptors=*/true);
+ }
+ }
+ }
+ }
+ }
+ }
+}
+RT_OFFLOAD_API_GROUP_END
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/copy.h b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/copy.h
new file mode 100644
index 00000000000..836c9d4a1ef
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/copy.h
@@ -0,0 +1,25 @@
+//===-- lib/runtime/copy.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Utilities that copy data in a type-aware fashion, allocating & duplicating
+// allocatable/automatic components of derived types along the way.
+
+#ifndef FLANG_RT_RUNTIME_COPY_H_
+#define FLANG_RT_RUNTIME_COPY_H_
+
+#include "flang-rt/runtime/descriptor.h"
+
+namespace Fortran::runtime {
+
+// Assigns to uninitialized storage.
+// Duplicates allocatable & automatic components.
+RT_API_ATTRS void CopyElement(const Descriptor &to, const SubscriptValue toAt[],
+ const Descriptor &from, const SubscriptValue fromAt[], Terminator &);
+
+} // namespace Fortran::runtime
+#endif // FLANG_RT_RUNTIME_COPY_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/derived-api.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/derived-api.cpp
new file mode 100644
index 00000000000..bb08e0397fe
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/derived-api.cpp
@@ -0,0 +1,159 @@
+//===-- lib/runtime/derived-api.cpp -----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang/Runtime/derived-api.h"
+#include "flang-rt/runtime/derived.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+#include "flang-rt/runtime/type-info.h"
+
+namespace Fortran::runtime {
+
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+void RTDEF(Initialize)(
+ const Descriptor &descriptor, const char *sourceFile, int sourceLine) {
+ if (const DescriptorAddendum * addendum{descriptor.Addendum()}) {
+ if (const auto *derived{addendum->derivedType()}) {
+ if (!derived->noInitializationNeeded()) {
+ Terminator terminator{sourceFile, sourceLine};
+ Initialize(descriptor, *derived, terminator);
+ }
+ }
+ }
+}
+
+void RTDEF(InitializeClone)(const Descriptor &clone, const Descriptor &orig,
+ const char *sourceFile, int sourceLine) {
+ if (const DescriptorAddendum * addendum{clone.Addendum()}) {
+ if (const auto *derived{addendum->derivedType()}) {
+ Terminator terminator{sourceFile, sourceLine};
+ InitializeClone(clone, orig, *derived, terminator);
+ }
+ }
+}
+
+void RTDEF(Destroy)(const Descriptor &descriptor) {
+ if (const DescriptorAddendum * addendum{descriptor.Addendum()}) {
+ if (const auto *derived{addendum->derivedType()}) {
+ if (!derived->noDestructionNeeded()) {
+ // TODO: Pass source file & line information to the API
+ // so that a good Terminator can be passed
+ Destroy(descriptor, true, *derived, nullptr);
+ }
+ }
+ }
+}
+
+void RTDEF(Finalize)(
+ const Descriptor &descriptor, const char *sourceFile, int sourceLine) {
+ if (const DescriptorAddendum * addendum{descriptor.Addendum()}) {
+ if (const auto *derived{addendum->derivedType()}) {
+ if (!derived->noFinalizationNeeded()) {
+ Terminator terminator{sourceFile, sourceLine};
+ Finalize(descriptor, *derived, &terminator);
+ }
+ }
+ }
+}
+
+bool RTDEF(ClassIs)(
+ const Descriptor &descriptor, const typeInfo::DerivedType &derivedType) {
+ if (const DescriptorAddendum * addendum{descriptor.Addendum()}) {
+ if (const auto *derived{addendum->derivedType()}) {
+ if (derived == &derivedType) {
+ return true;
+ }
+ const typeInfo::DerivedType *parent{derived->GetParentType()};
+ while (parent) {
+ if (parent == &derivedType) {
+ return true;
+ }
+ parent = parent->GetParentType();
+ }
+ }
+ }
+ return false;
+}
+
+static RT_API_ATTRS const typeInfo::DerivedType *GetDerivedType(
+ const Descriptor &desc) {
+ if (const DescriptorAddendum * addendum{desc.Addendum()}) {
+ if (const auto *derived{addendum->derivedType()}) {
+ return derived;
+ }
+ }
+ return nullptr;
+}
+
+bool RTDEF(SameTypeAs)(const Descriptor &a, const Descriptor &b) {
+ auto aType{a.raw().type};
+ auto bType{b.raw().type};
+ if ((aType != CFI_type_struct && aType != CFI_type_other) ||
+ (bType != CFI_type_struct && bType != CFI_type_other)) {
+ // If either type is intrinsic, they must match.
+ return aType == bType;
+ } else if (const typeInfo::DerivedType * derivedTypeA{GetDerivedType(a)}) {
+ if (const typeInfo::DerivedType * derivedTypeB{GetDerivedType(b)}) {
+ if (derivedTypeA == derivedTypeB) {
+ return true;
+ } else if (const typeInfo::DerivedType *
+ uninstDerivedTypeA{derivedTypeA->uninstantiatedType()}) {
+ // There are KIND type parameters, are these the same type if those
+ // are ignored?
+ const typeInfo::DerivedType *uninstDerivedTypeB{
+ derivedTypeB->uninstantiatedType()};
+ return uninstDerivedTypeA == uninstDerivedTypeB;
+ }
+ }
+ }
+ return false;
+}
+
+bool RTDEF(ExtendsTypeOf)(const Descriptor &a, const Descriptor &mold) {
+ auto aType{a.raw().type};
+ auto moldType{mold.raw().type};
+ if ((aType != CFI_type_struct && aType != CFI_type_other) ||
+ (moldType != CFI_type_struct && moldType != CFI_type_other)) {
+ // If either type is intrinsic, they must match.
+ return aType == moldType;
+ } else if (const typeInfo::DerivedType *
+ derivedTypeMold{GetDerivedType(mold)}) {
+ // If A is unlimited polymorphic and is either a disassociated pointer or
+ // unallocated allocatable, the result is false.
+ // Otherwise if the dynamic type of A or MOLD is extensible, the result is
+ // true if and only if the dynamic type of A is an extension type of the
+ // dynamic type of MOLD.
+ for (const typeInfo::DerivedType *derivedTypeA{GetDerivedType(a)};
+ derivedTypeA; derivedTypeA = derivedTypeA->GetParentType()) {
+ if (derivedTypeA == derivedTypeMold) {
+ return true;
+ }
+ }
+ return false;
+ } else {
+ // MOLD is unlimited polymorphic and unallocated/disassociated.
+ return true;
+ }
+}
+
+void RTDEF(DestroyWithoutFinalization)(const Descriptor &descriptor) {
+ if (const DescriptorAddendum * addendum{descriptor.Addendum()}) {
+ if (const auto *derived{addendum->derivedType()}) {
+ if (!derived->noDestructionNeeded()) {
+ Destroy(descriptor, /*finalize=*/false, *derived, nullptr);
+ }
+ }
+ }
+}
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/derived.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/derived.cpp
new file mode 100644
index 00000000000..bb9a68abef2
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/derived.cpp
@@ -0,0 +1,489 @@
+//===-- lib/runtime/derived.cpp ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang-rt/runtime/derived.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/stat.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+#include "flang-rt/runtime/type-info.h"
+#include "flang-rt/runtime/work-queue.h"
+
+namespace Fortran::runtime {
+
+RT_OFFLOAD_API_GROUP_BEGIN
+
+// Fill "extents" array with the extents of component "comp" from derived type
+// instance "derivedInstance".
+static RT_API_ATTRS void GetComponentExtents(SubscriptValue (&extents)[maxRank],
+ const typeInfo::Component &comp, const Descriptor &derivedInstance) {
+ const typeInfo::Value *bounds{comp.bounds()};
+ for (int dim{0}; dim < comp.rank(); ++dim) {
+ auto lb{bounds[2 * dim].GetValue(&derivedInstance).value_or(0)};
+ auto ub{bounds[2 * dim + 1].GetValue(&derivedInstance).value_or(0)};
+ extents[dim] = ub >= lb ? static_cast<SubscriptValue>(ub - lb + 1) : 0;
+ }
+}
+
+RT_API_ATTRS int Initialize(const Descriptor &instance,
+ const typeInfo::DerivedType &derived, Terminator &terminator, bool,
+ const Descriptor *) {
+ WorkQueue workQueue{terminator};
+ int status{workQueue.BeginInitialize(instance, derived)};
+ return status == StatContinue ? workQueue.Run() : status;
+}
+
+RT_API_ATTRS int InitializeTicket::Begin(WorkQueue &) {
+ if (elements_ == 0) {
+ return StatOk;
+ } else {
+ // Initialize procedure pointer components in the first element,
+ // whence they will be copied later into all others.
+ const Descriptor &procPtrDesc{derived_.procPtr()};
+ std::size_t numProcPtrs{procPtrDesc.InlineElements()};
+ char *raw{instance_.OffsetElement<char>()};
+ const auto *ppComponent{
+ procPtrDesc.OffsetElement<typeInfo::ProcPtrComponent>()};
+ for (std::size_t k{0}; k < numProcPtrs; ++k, ++ppComponent) {
+ auto &pptr{*reinterpret_cast<typeInfo::ProcedurePointer *>(
+ raw + ppComponent->offset)};
+ pptr = ppComponent->procInitialization;
+ }
+ return StatContinue;
+ }
+}
+
+RT_API_ATTRS int InitializeTicket::Continue(WorkQueue &workQueue) {
+ // Initialize the data components of the first element.
+ char *rawInstance{instance_.OffsetElement<char>()};
+ for (; !Componentwise::IsComplete(); SkipToNextComponent()) {
+ char *rawComponent{rawInstance + component_->offset()};
+ if (component_->genre() == typeInfo::Component::Genre::Allocatable) {
+ Descriptor &allocDesc{*reinterpret_cast<Descriptor *>(rawComponent)};
+ component_->EstablishDescriptor(
+ allocDesc, instance_, workQueue.terminator());
+ } else if (const void *init{component_->initialization()}) {
+ // Explicit initialization of data pointers and
+ // non-allocatable non-automatic components
+ std::size_t bytes{component_->SizeInBytes(instance_)};
+ std::memcpy(rawComponent, init, bytes);
+ } else if (component_->genre() == typeInfo::Component::Genre::Pointer) {
+ // Data pointers without explicit initialization are established
+ // so that they are valid right-hand side targets of pointer
+ // assignment statements.
+ Descriptor &ptrDesc{*reinterpret_cast<Descriptor *>(rawComponent)};
+ component_->EstablishDescriptor(
+ ptrDesc, instance_, workQueue.terminator());
+ } else if (component_->genre() == typeInfo::Component::Genre::Data &&
+ component_->derivedType() &&
+ !component_->derivedType()->noInitializationNeeded()) {
+ // Default initialization of non-pointer non-allocatable/automatic
+ // data component. Handles parent component's elements.
+ SubscriptValue extents[maxRank];
+ GetComponentExtents(extents, *component_, instance_);
+ Descriptor &compDesc{componentDescriptor_.descriptor()};
+ const typeInfo::DerivedType &compType{*component_->derivedType()};
+ compDesc.Establish(compType, rawComponent, component_->rank(), extents);
+ if (int status{workQueue.BeginInitialize(compDesc, compType)};
+ status != StatOk) {
+ SkipToNextComponent();
+ return status;
+ }
+ }
+ }
+ // The first element is now complete. Copy it into the others.
+ if (elements_ < 2) {
+ } else {
+ auto elementBytes{static_cast<SubscriptValue>(instance_.ElementBytes())};
+ if (auto stride{instance_.FixedStride()}) {
+ if (*stride == elementBytes) { // contiguous
+ for (std::size_t done{1}; done < elements_;) {
+ std::size_t chunk{elements_ - done};
+ if (chunk > done) {
+ chunk = done;
+ }
+ char *uninitialized{rawInstance + done * *stride};
+ std::memcpy(uninitialized, rawInstance, chunk * *stride);
+ done += chunk;
+ }
+ } else {
+ for (std::size_t done{1}; done < elements_; ++done) {
+ char *uninitialized{rawInstance + done * *stride};
+ std::memcpy(uninitialized, rawInstance, elementBytes);
+ }
+ }
+ } else { // one at a time with subscription
+ for (Elementwise::Advance(); !Elementwise::IsComplete();
+ Elementwise::Advance()) {
+ char *element{instance_.Element<char>(subscripts_)};
+ std::memcpy(element, rawInstance, elementBytes);
+ }
+ }
+ }
+ return StatOk;
+}
+
+RT_API_ATTRS int InitializeClone(const Descriptor &clone,
+ const Descriptor &original, const typeInfo::DerivedType &derived,
+ Terminator &terminator, bool hasStat, const Descriptor *errMsg) {
+ if (original.IsPointer() || !original.IsAllocated()) {
+ return StatOk; // nothing to do
+ } else {
+ WorkQueue workQueue{terminator};
+ int status{workQueue.BeginInitializeClone(
+ clone, original, derived, hasStat, errMsg)};
+ return status == StatContinue ? workQueue.Run() : status;
+ }
+}
+
+RT_API_ATTRS int InitializeCloneTicket::Continue(WorkQueue &workQueue) {
+ while (!IsComplete()) {
+ if (component_->genre() == typeInfo::Component::Genre::Allocatable) {
+ Descriptor &origDesc{*instance_.ElementComponent<Descriptor>(
+ subscripts_, component_->offset())};
+ if (origDesc.IsAllocated()) {
+ Descriptor &cloneDesc{*clone_.ElementComponent<Descriptor>(
+ subscripts_, component_->offset())};
+ if (phase_ == 0) {
+ ++phase_;
+ cloneDesc.ApplyMold(origDesc, origDesc.rank());
+ if (int stat{ReturnError(workQueue.terminator(),
+ cloneDesc.Allocate(kNoAsyncObject), errMsg_, hasStat_)};
+ stat != StatOk) {
+ return stat;
+ }
+ if (const DescriptorAddendum *addendum{cloneDesc.Addendum()}) {
+ if (const typeInfo::DerivedType *derived{addendum->derivedType()}) {
+ if (!derived->noInitializationNeeded()) {
+ // Perform default initialization for the allocated element.
+ if (int status{workQueue.BeginInitialize(cloneDesc, *derived)};
+ status != StatOk) {
+ return status;
+ }
+ }
+ }
+ }
+ }
+ if (phase_ == 1) {
+ ++phase_;
+ if (const DescriptorAddendum *addendum{cloneDesc.Addendum()}) {
+ if (const typeInfo::DerivedType *derived{addendum->derivedType()}) {
+ // Initialize derived type's allocatables.
+ if (int status{workQueue.BeginInitializeClone(
+ cloneDesc, origDesc, *derived, hasStat_, errMsg_)};
+ status != StatOk) {
+ return status;
+ }
+ }
+ }
+ }
+ }
+ Advance();
+ } else if (component_->genre() == typeInfo::Component::Genre::Data) {
+ if (component_->derivedType()) {
+ // Handle nested derived types.
+ const typeInfo::DerivedType &compType{*component_->derivedType()};
+ SubscriptValue extents[maxRank];
+ GetComponentExtents(extents, *component_, instance_);
+ Descriptor &origDesc{componentDescriptor_.descriptor()};
+ Descriptor &cloneDesc{cloneComponentDescriptor_.descriptor()};
+ origDesc.Establish(compType,
+ instance_.ElementComponent<char>(subscripts_, component_->offset()),
+ component_->rank(), extents);
+ cloneDesc.Establish(compType,
+ clone_.ElementComponent<char>(subscripts_, component_->offset()),
+ component_->rank(), extents);
+ Advance();
+ if (int status{workQueue.BeginInitializeClone(
+ cloneDesc, origDesc, compType, hasStat_, errMsg_)};
+ status != StatOk) {
+ return status;
+ }
+ } else {
+ SkipToNextComponent();
+ }
+ } else {
+ SkipToNextComponent();
+ }
+ }
+ return StatOk;
+}
+
+// Fortran 2018 subclause 7.5.6.2
+RT_API_ATTRS void Finalize(const Descriptor &descriptor,
+ const typeInfo::DerivedType &derived, Terminator *terminator) {
+ if (!derived.noFinalizationNeeded() && descriptor.IsAllocated()) {
+ Terminator stubTerminator{"Finalize() in Fortran runtime", 0};
+ WorkQueue workQueue{terminator ? *terminator : stubTerminator};
+ if (workQueue.BeginFinalize(descriptor, derived) == StatContinue) {
+ workQueue.Run();
+ }
+ }
+}
+
+static RT_API_ATTRS const typeInfo::SpecialBinding *FindFinal(
+ const typeInfo::DerivedType &derived, int rank) {
+ if (const auto *ranked{derived.FindSpecialBinding(
+ typeInfo::SpecialBinding::RankFinal(rank))}) {
+ return ranked;
+ } else if (const auto *assumed{derived.FindSpecialBinding(
+ typeInfo::SpecialBinding::Which::AssumedRankFinal)}) {
+ return assumed;
+ } else {
+ return derived.FindSpecialBinding(
+ typeInfo::SpecialBinding::Which::ElementalFinal);
+ }
+}
+
+static RT_API_ATTRS void CallFinalSubroutine(const Descriptor &descriptor,
+ const typeInfo::DerivedType &derived, Terminator &terminator) {
+ if (const auto *special{FindFinal(derived, descriptor.rank())}) {
+ if (special->which() == typeInfo::SpecialBinding::Which::ElementalFinal) {
+ std::size_t elements{descriptor.InlineElements()};
+ SubscriptValue at[maxRank];
+ descriptor.GetLowerBounds(at);
+ if (special->IsArgDescriptor(0)) {
+ StaticDescriptor<maxRank, true, 8 /*?*/> statDesc;
+ Descriptor &elemDesc{statDesc.descriptor()};
+ elemDesc = descriptor;
+ elemDesc.raw().attribute = CFI_attribute_pointer;
+ elemDesc.raw().rank = 0;
+ auto *p{special->GetProc<void (*)(const Descriptor &)>()};
+ for (std::size_t j{0}; j++ < elements;
+ descriptor.IncrementSubscripts(at)) {
+ elemDesc.set_base_addr(descriptor.Element<char>(at));
+ p(elemDesc);
+ }
+ } else {
+ auto *p{special->GetProc<void (*)(char *)>()};
+ for (std::size_t j{0}; j++ < elements;
+ descriptor.IncrementSubscripts(at)) {
+ p(descriptor.Element<char>(at));
+ }
+ }
+ } else {
+ StaticDescriptor<maxRank, true, 10> statDesc;
+ Descriptor &copy{statDesc.descriptor()};
+ const Descriptor *argDescriptor{&descriptor};
+ if (descriptor.rank() > 0 && special->IsArgContiguous(0) &&
+ !descriptor.IsContiguous()) {
+ // The FINAL subroutine demands a contiguous array argument, but
+ // this INTENT(OUT) or intrinsic assignment LHS isn't contiguous.
+ // Finalize a shallow copy of the data.
+ copy = descriptor;
+ copy.set_base_addr(nullptr);
+ copy.raw().attribute = CFI_attribute_allocatable;
+ RUNTIME_CHECK(terminator, copy.Allocate(kNoAsyncObject) == CFI_SUCCESS);
+ ShallowCopyDiscontiguousToContiguous(copy, descriptor);
+ argDescriptor = &copy;
+ }
+ if (special->IsArgDescriptor(0)) {
+ StaticDescriptor<maxRank, true, 8 /*?*/> statDesc;
+ Descriptor &tmpDesc{statDesc.descriptor()};
+ tmpDesc = *argDescriptor;
+ tmpDesc.raw().attribute = CFI_attribute_pointer;
+ tmpDesc.Addendum()->set_derivedType(&derived);
+ auto *p{special->GetProc<void (*)(const Descriptor &)>()};
+ p(tmpDesc);
+ } else {
+ auto *p{special->GetProc<void (*)(char *)>()};
+ p(argDescriptor->OffsetElement<char>());
+ }
+ if (argDescriptor == &copy) {
+ ShallowCopyContiguousToDiscontiguous(descriptor, copy);
+ copy.Deallocate();
+ }
+ }
+ }
+}
+
+RT_API_ATTRS int FinalizeTicket::Begin(WorkQueue &workQueue) {
+ CallFinalSubroutine(instance_, derived_, workQueue.terminator());
+ // If there's a finalizable parent component, handle it last, as required
+ // by the Fortran standard (7.5.6.2), and do so recursively with the same
+ // descriptor so that the rank is preserved.
+ finalizableParentType_ = derived_.GetParentType();
+ if (finalizableParentType_) {
+ if (finalizableParentType_->noFinalizationNeeded()) {
+ finalizableParentType_ = nullptr;
+ } else {
+ SkipToNextComponent();
+ }
+ }
+ return StatContinue;
+}
+
+RT_API_ATTRS int FinalizeTicket::Continue(WorkQueue &workQueue) {
+ while (!IsComplete()) {
+ if (component_->genre() == typeInfo::Component::Genre::Allocatable &&
+ component_->category() == TypeCategory::Derived) {
+ // Component may be polymorphic or unlimited polymorphic. Need to use the
+ // dynamic type to check whether finalization is needed.
+ const Descriptor &compDesc{*instance_.ElementComponent<Descriptor>(
+ subscripts_, component_->offset())};
+ Advance();
+ if (compDesc.IsAllocated()) {
+ if (const DescriptorAddendum *addendum{compDesc.Addendum()}) {
+ if (const typeInfo::DerivedType *compDynamicType{
+ addendum->derivedType()}) {
+ if (!compDynamicType->noFinalizationNeeded()) {
+ if (int status{
+ workQueue.BeginFinalize(compDesc, *compDynamicType)};
+ status != StatOk) {
+ return status;
+ }
+ }
+ }
+ }
+ }
+ } else if (component_->genre() == typeInfo::Component::Genre::Allocatable ||
+ component_->genre() == typeInfo::Component::Genre::Automatic) {
+ if (const typeInfo::DerivedType *compType{component_->derivedType()};
+ compType && !compType->noFinalizationNeeded()) {
+ const Descriptor &compDesc{*instance_.ElementComponent<Descriptor>(
+ subscripts_, component_->offset())};
+ Advance();
+ if (compDesc.IsAllocated()) {
+ if (int status{workQueue.BeginFinalize(compDesc, *compType)};
+ status != StatOk) {
+ return status;
+ }
+ }
+ } else {
+ SkipToNextComponent();
+ }
+ } else if (component_->genre() == typeInfo::Component::Genre::Data &&
+ component_->derivedType() &&
+ !component_->derivedType()->noFinalizationNeeded()) {
+ SubscriptValue extents[maxRank];
+ GetComponentExtents(extents, *component_, instance_);
+ Descriptor &compDesc{componentDescriptor_.descriptor()};
+ const typeInfo::DerivedType &compType{*component_->derivedType()};
+ compDesc.Establish(compType,
+ instance_.ElementComponent<char>(subscripts_, component_->offset()),
+ component_->rank(), extents);
+ Advance();
+ if (int status{workQueue.BeginFinalize(compDesc, compType)};
+ status != StatOk) {
+ return status;
+ }
+ } else {
+ SkipToNextComponent();
+ }
+ }
+ // Last, do the parent component, if any and finalizable.
+ if (finalizableParentType_) {
+ Descriptor &tmpDesc{componentDescriptor_.descriptor()};
+ tmpDesc = instance_;
+ tmpDesc.raw().attribute = CFI_attribute_pointer;
+ tmpDesc.Addendum()->set_derivedType(finalizableParentType_);
+ tmpDesc.raw().elem_len = finalizableParentType_->sizeInBytes();
+ const auto &parentType{*finalizableParentType_};
+ finalizableParentType_ = nullptr;
+ // Don't return StatOk here if the nested FInalize is still running;
+ // it needs this->componentDescriptor_.
+ return workQueue.BeginFinalize(tmpDesc, parentType);
+ }
+ return StatOk;
+}
+
+// The order of finalization follows Fortran 2018 7.5.6.2, with
+// elementwise finalization of non-parent components taking place
+// before parent component finalization, and with all finalization
+// preceding any deallocation.
+RT_API_ATTRS void Destroy(const Descriptor &descriptor, bool finalize,
+ const typeInfo::DerivedType &derived, Terminator *terminator) {
+ if (descriptor.IsAllocated() && !derived.noDestructionNeeded()) {
+ Terminator stubTerminator{"Destroy() in Fortran runtime", 0};
+ WorkQueue workQueue{terminator ? *terminator : stubTerminator};
+ if (workQueue.BeginDestroy(descriptor, derived, finalize) == StatContinue) {
+ workQueue.Run();
+ }
+ }
+}
+
+RT_API_ATTRS int DestroyTicket::Begin(WorkQueue &workQueue) {
+ if (finalize_ && !derived_.noFinalizationNeeded()) {
+ if (int status{workQueue.BeginFinalize(instance_, derived_)};
+ status != StatOk && status != StatContinue) {
+ return status;
+ }
+ }
+ return StatContinue;
+}
+
+RT_API_ATTRS int DestroyTicket::Continue(WorkQueue &workQueue) {
+ // Deallocate all direct and indirect allocatable and automatic components.
+ // Contrary to finalization, the order of deallocation does not matter.
+ while (!IsComplete()) {
+ const auto *componentDerived{component_->derivedType()};
+ if (component_->genre() == typeInfo::Component::Genre::Allocatable) {
+ if (fixedStride_ &&
+ (!componentDerived || componentDerived->noDestructionNeeded())) {
+ // common fast path, just deallocate in every element
+ char *p{instance_.OffsetElement<char>(component_->offset())};
+ for (std::size_t j{0}; j < elements_; ++j, p += *fixedStride_) {
+ Descriptor &d{*reinterpret_cast<Descriptor *>(p)};
+ d.Deallocate();
+ }
+ SkipToNextComponent();
+ } else {
+ Descriptor &d{*instance_.ElementComponent<Descriptor>(
+ subscripts_, component_->offset())};
+ if (d.IsAllocated()) {
+ if (componentDerived && !componentDerived->noDestructionNeeded() &&
+ phase_ == 0) {
+ if (int status{workQueue.BeginDestroy(
+ d, *componentDerived, /*finalize=*/false)};
+ status != StatOk) {
+ ++phase_;
+ return status;
+ }
+ }
+ d.Deallocate();
+ }
+ Advance();
+ }
+ } else if (component_->genre() == typeInfo::Component::Genre::Data) {
+ if (!componentDerived || componentDerived->noDestructionNeeded()) {
+ SkipToNextComponent();
+ } else {
+ SubscriptValue extents[maxRank];
+ GetComponentExtents(extents, *component_, instance_);
+ Descriptor &compDesc{componentDescriptor_.descriptor()};
+ const typeInfo::DerivedType &compType{*componentDerived};
+ compDesc.Establish(compType,
+ instance_.ElementComponent<char>(subscripts_, component_->offset()),
+ component_->rank(), extents);
+ Advance();
+ if (int status{workQueue.BeginDestroy(
+ compDesc, *componentDerived, /*finalize=*/false)};
+ status != StatOk) {
+ return status;
+ }
+ }
+ } else {
+ SkipToNextComponent();
+ }
+ }
+ return StatOk;
+}
+
+RT_API_ATTRS bool HasDynamicComponent(const Descriptor &descriptor) {
+ if (const DescriptorAddendum * addendum{descriptor.Addendum()}) {
+ if (const auto *derived = addendum->derivedType()) {
+ // Destruction is needed if and only if there are direct or indirect
+ // allocatable or automatic components.
+ return !derived->noDestructionNeeded();
+ }
+ }
+ return false;
+}
+
+RT_OFFLOAD_API_GROUP_END
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/descriptor-io.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/descriptor-io.cpp
new file mode 100644
index 00000000000..b208cb2c397
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/descriptor-io.cpp
@@ -0,0 +1,809 @@
+//===-- lib/runtime/descriptor-io.cpp ---------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "descriptor-io.h"
+#include "edit-input.h"
+#include "edit-output.h"
+#include "unit.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/io-stmt.h"
+#include "flang-rt/runtime/namelist.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/type-info.h"
+#include "flang-rt/runtime/work-queue.h"
+#include "flang/Common/optional.h"
+#include "flang/Common/restorer.h"
+#include "flang/Common/uint128.h"
+#include "flang/Runtime/cpp-type.h"
+#include "flang/Runtime/freestanding-tools.h"
+
+// Implementation of I/O data list item transfers based on descriptors.
+// (All I/O items come through here so that the code is exercised for test;
+// some scalar I/O data transfer APIs could be changed to bypass their use
+// of descriptors in the future for better efficiency.)
+
+namespace Fortran::runtime::io::descr {
+RT_OFFLOAD_API_GROUP_BEGIN
+
+template <typename A>
+inline RT_API_ATTRS A &ExtractElement(IoStatementState &io,
+ const Descriptor &descriptor, const SubscriptValue subscripts[]) {
+ A *p{descriptor.Element<A>(subscripts)};
+ if (!p) {
+ io.GetIoErrorHandler().Crash("Bad address for I/O item -- null base "
+ "address or subscripts out of range");
+ }
+ return *p;
+}
+
+// Defined formatted I/O (maybe)
+static RT_API_ATTRS Fortran::common::optional<bool> DefinedFormattedIo(
+ IoStatementState &io, const Descriptor &descriptor,
+ const typeInfo::DerivedType &derived,
+ const typeInfo::SpecialBinding &special,
+ const SubscriptValue subscripts[]) {
+ Fortran::common::optional<DataEdit> peek{
+ io.GetNextDataEdit(0 /*to peek at it*/)};
+ if (peek &&
+ (peek->descriptor == DataEdit::DefinedDerivedType ||
+ peek->descriptor == DataEdit::ListDirected)) {
+ // Defined formatting
+ IoErrorHandler &handler{io.GetIoErrorHandler()};
+ DataEdit edit{*io.GetNextDataEdit(1)}; // now consume it; no repeats
+ RUNTIME_CHECK(handler, edit.descriptor == peek->descriptor);
+ char ioType[2 + edit.maxIoTypeChars];
+ auto ioTypeLen{std::size_t{2} /*"DT"*/ + edit.ioTypeChars};
+ if (edit.descriptor == DataEdit::DefinedDerivedType) {
+ ioType[0] = 'D';
+ ioType[1] = 'T';
+ std::memcpy(ioType + 2, edit.ioType, edit.ioTypeChars);
+ } else {
+ runtime::strcpy(
+ ioType, io.mutableModes().inNamelist ? "NAMELIST" : "LISTDIRECTED");
+ ioTypeLen = runtime::strlen(ioType);
+ }
+ StaticDescriptor<1, true> vListStatDesc;
+ Descriptor &vListDesc{vListStatDesc.descriptor()};
+ vListDesc.Establish(TypeCategory::Integer, sizeof(int), nullptr, 1);
+ vListDesc.set_base_addr(edit.vList);
+ vListDesc.GetDimension(0).SetBounds(1, edit.vListEntries);
+ vListDesc.GetDimension(0).SetByteStride(
+ static_cast<SubscriptValue>(sizeof(int)));
+ ExternalFileUnit *actualExternal{io.GetExternalFileUnit()};
+ ExternalFileUnit *external{actualExternal};
+ if (!external) {
+ // Create a new unit to service defined I/O for an
+ // internal I/O parent.
+ external = &ExternalFileUnit::NewUnit(handler, true);
+ }
+ ChildIo &child{external->PushChildIo(io)};
+ // Child formatted I/O is nonadvancing by definition (F'2018 12.6.2.4).
+ auto restorer{common::ScopedSet(io.mutableModes().nonAdvancing, true)};
+ int unit{external->unitNumber()};
+ int ioStat{IostatOk};
+ char ioMsg[100];
+ Fortran::common::optional<std::int64_t> startPos;
+ if (edit.descriptor == DataEdit::DefinedDerivedType &&
+ special.which() == typeInfo::SpecialBinding::Which::ReadFormatted) {
+ // DT is an edit descriptor so everything that the child
+ // I/O subroutine reads counts towards READ(SIZE=).
+ startPos = io.InquirePos();
+ }
+ const auto *bindings{
+ derived.binding().OffsetElement<const typeInfo::Binding>()};
+ if (special.IsArgDescriptor(0)) {
+ // "dtv" argument is "class(t)", pass a descriptor
+ auto *p{special.GetProc<void (*)(const Descriptor &, int &, char *,
+ const Descriptor &, int &, char *, std::size_t, std::size_t)>(
+ bindings)};
+ StaticDescriptor<1, true, 10 /*?*/> elementStatDesc;
+ Descriptor &elementDesc{elementStatDesc.descriptor()};
+ elementDesc.Establish(
+ derived, nullptr, 0, nullptr, CFI_attribute_pointer);
+ elementDesc.set_base_addr(descriptor.Element<char>(subscripts));
+ p(elementDesc, unit, ioType, vListDesc, ioStat, ioMsg, ioTypeLen,
+ sizeof ioMsg);
+ } else {
+ // "dtv" argument is "type(t)", pass a raw pointer
+ auto *p{special.GetProc<void (*)(const void *, int &, char *,
+ const Descriptor &, int &, char *, std::size_t, std::size_t)>(
+ bindings)};
+ p(descriptor.Element<char>(subscripts), unit, ioType, vListDesc, ioStat,
+ ioMsg, ioTypeLen, sizeof ioMsg);
+ }
+ handler.Forward(ioStat, ioMsg, sizeof ioMsg);
+ external->PopChildIo(child);
+ if (!actualExternal) {
+ // Close unit created for internal I/O above.
+ auto *closing{external->LookUpForClose(external->unitNumber())};
+ RUNTIME_CHECK(handler, external == closing);
+ external->DestroyClosed();
+ }
+ if (startPos) {
+ io.GotChar(io.InquirePos() - *startPos);
+ }
+ return handler.GetIoStat() == IostatOk;
+ } else {
+ // There's a defined I/O subroutine, but there's a FORMAT present and
+ // it does not have a DT data edit descriptor, so apply default formatting
+ // to the components of the derived type as usual.
+ return Fortran::common::nullopt;
+ }
+}
+
+// Defined unformatted I/O
+static RT_API_ATTRS bool DefinedUnformattedIo(IoStatementState &io,
+ const Descriptor &descriptor, const typeInfo::DerivedType &derived,
+ const typeInfo::SpecialBinding &special) {
+ // Unformatted I/O must have an external unit (or child thereof).
+ IoErrorHandler &handler{io.GetIoErrorHandler()};
+ ExternalFileUnit *external{io.GetExternalFileUnit()};
+ if (!external) { // INQUIRE(IOLENGTH=)
+ handler.SignalError(IostatNonExternalDefinedUnformattedIo);
+ return false;
+ }
+ ChildIo &child{external->PushChildIo(io)};
+ int unit{external->unitNumber()};
+ int ioStat{IostatOk};
+ char ioMsg[100];
+ std::size_t numElements{descriptor.Elements()};
+ SubscriptValue subscripts[maxRank];
+ descriptor.GetLowerBounds(subscripts);
+ const auto *bindings{
+ derived.binding().OffsetElement<const typeInfo::Binding>()};
+ if (special.IsArgDescriptor(0)) {
+ // "dtv" argument is "class(t)", pass a descriptor
+ auto *p{special.GetProc<void (*)(
+ const Descriptor &, int &, int &, char *, std::size_t)>(bindings)};
+ StaticDescriptor<1, true, 10 /*?*/> elementStatDesc;
+ Descriptor &elementDesc{elementStatDesc.descriptor()};
+ elementDesc.Establish(derived, nullptr, 0, nullptr, CFI_attribute_pointer);
+ for (; numElements-- > 0; descriptor.IncrementSubscripts(subscripts)) {
+ elementDesc.set_base_addr(descriptor.Element<char>(subscripts));
+ p(elementDesc, unit, ioStat, ioMsg, sizeof ioMsg);
+ if (ioStat != IostatOk) {
+ break;
+ }
+ }
+ } else {
+ // "dtv" argument is "type(t)", pass a raw pointer
+ auto *p{special
+ .GetProc<void (*)(const void *, int &, int &, char *, std::size_t)>(
+ bindings)};
+ for (; numElements-- > 0; descriptor.IncrementSubscripts(subscripts)) {
+ p(descriptor.Element<char>(subscripts), unit, ioStat, ioMsg,
+ sizeof ioMsg);
+ if (ioStat != IostatOk) {
+ break;
+ }
+ }
+ }
+ handler.Forward(ioStat, ioMsg, sizeof ioMsg);
+ external->PopChildIo(child);
+ return handler.GetIoStat() == IostatOk;
+}
+
+// Per-category descriptor-based I/O templates
+
+// TODO (perhaps as a nontrivial but small starter project): implement
+// automatic repetition counts, like "10*3.14159", for list-directed and
+// NAMELIST array output.
+
+template <int KIND, Direction DIR>
+inline RT_API_ATTRS bool FormattedIntegerIO(IoStatementState &io,
+ const Descriptor &descriptor, [[maybe_unused]] bool isSigned) {
+ std::size_t numElements{descriptor.Elements()};
+ SubscriptValue subscripts[maxRank];
+ descriptor.GetLowerBounds(subscripts);
+ using IntType = CppTypeFor<common::TypeCategory::Integer, KIND>;
+ bool anyInput{false};
+ for (std::size_t j{0}; j < numElements; ++j) {
+ if (auto edit{io.GetNextDataEdit()}) {
+ IntType &x{ExtractElement<IntType>(io, descriptor, subscripts)};
+ if constexpr (DIR == Direction::Output) {
+ if (!EditIntegerOutput<KIND>(io, *edit, x, isSigned)) {
+ return false;
+ }
+ } else if (edit->descriptor != DataEdit::ListDirectedNullValue) {
+ if (EditIntegerInput(
+ io, *edit, reinterpret_cast<void *>(&x), KIND, isSigned)) {
+ anyInput = true;
+ } else {
+ return anyInput && edit->IsNamelist();
+ }
+ }
+ if (!descriptor.IncrementSubscripts(subscripts) && j + 1 < numElements) {
+ io.GetIoErrorHandler().Crash(
+ "FormattedIntegerIO: subscripts out of bounds");
+ }
+ } else {
+ return false;
+ }
+ }
+ return true;
+}
+
+template <int KIND, Direction DIR>
+inline RT_API_ATTRS bool FormattedRealIO(
+ IoStatementState &io, const Descriptor &descriptor) {
+ std::size_t numElements{descriptor.Elements()};
+ SubscriptValue subscripts[maxRank];
+ descriptor.GetLowerBounds(subscripts);
+ using RawType = typename RealOutputEditing<KIND>::BinaryFloatingPoint;
+ bool anyInput{false};
+ for (std::size_t j{0}; j < numElements; ++j) {
+ if (auto edit{io.GetNextDataEdit()}) {
+ RawType &x{ExtractElement<RawType>(io, descriptor, subscripts)};
+ if constexpr (DIR == Direction::Output) {
+ if (!RealOutputEditing<KIND>{io, x}.Edit(*edit)) {
+ return false;
+ }
+ } else if (edit->descriptor != DataEdit::ListDirectedNullValue) {
+ if (EditRealInput<KIND>(io, *edit, reinterpret_cast<void *>(&x))) {
+ anyInput = true;
+ } else {
+ return anyInput && edit->IsNamelist();
+ }
+ }
+ if (!descriptor.IncrementSubscripts(subscripts) && j + 1 < numElements) {
+ io.GetIoErrorHandler().Crash(
+ "FormattedRealIO: subscripts out of bounds");
+ }
+ } else {
+ return false;
+ }
+ }
+ return true;
+}
+
+template <int KIND, Direction DIR>
+inline RT_API_ATTRS bool FormattedComplexIO(
+ IoStatementState &io, const Descriptor &descriptor) {
+ std::size_t numElements{descriptor.Elements()};
+ SubscriptValue subscripts[maxRank];
+ descriptor.GetLowerBounds(subscripts);
+ bool isListOutput{
+ io.get_if<ListDirectedStatementState<Direction::Output>>() != nullptr};
+ using RawType = typename RealOutputEditing<KIND>::BinaryFloatingPoint;
+ bool anyInput{false};
+ for (std::size_t j{0}; j < numElements; ++j) {
+ RawType *x{&ExtractElement<RawType>(io, descriptor, subscripts)};
+ if (isListOutput) {
+ DataEdit rEdit, iEdit;
+ rEdit.descriptor = DataEdit::ListDirectedRealPart;
+ iEdit.descriptor = DataEdit::ListDirectedImaginaryPart;
+ rEdit.modes = iEdit.modes = io.mutableModes();
+ if (!RealOutputEditing<KIND>{io, x[0]}.Edit(rEdit) ||
+ !RealOutputEditing<KIND>{io, x[1]}.Edit(iEdit)) {
+ return false;
+ }
+ } else {
+ for (int k{0}; k < 2; ++k, ++x) {
+ auto edit{io.GetNextDataEdit()};
+ if (!edit) {
+ return false;
+ } else if constexpr (DIR == Direction::Output) {
+ if (!RealOutputEditing<KIND>{io, *x}.Edit(*edit)) {
+ return false;
+ }
+ } else if (edit->descriptor == DataEdit::ListDirectedNullValue) {
+ break;
+ } else if (EditRealInput<KIND>(
+ io, *edit, reinterpret_cast<void *>(x))) {
+ anyInput = true;
+ } else {
+ return anyInput && edit->IsNamelist();
+ }
+ }
+ }
+ if (!descriptor.IncrementSubscripts(subscripts) && j + 1 < numElements) {
+ io.GetIoErrorHandler().Crash(
+ "FormattedComplexIO: subscripts out of bounds");
+ }
+ }
+ return true;
+}
+
+template <typename A, Direction DIR>
+inline RT_API_ATTRS bool FormattedCharacterIO(
+ IoStatementState &io, const Descriptor &descriptor) {
+ std::size_t numElements{descriptor.Elements()};
+ SubscriptValue subscripts[maxRank];
+ descriptor.GetLowerBounds(subscripts);
+ std::size_t length{descriptor.ElementBytes() / sizeof(A)};
+ auto *listOutput{io.get_if<ListDirectedStatementState<Direction::Output>>()};
+ bool anyInput{false};
+ for (std::size_t j{0}; j < numElements; ++j) {
+ A *x{&ExtractElement<A>(io, descriptor, subscripts)};
+ if (listOutput) {
+ if (!ListDirectedCharacterOutput(io, *listOutput, x, length)) {
+ return false;
+ }
+ } else if (auto edit{io.GetNextDataEdit()}) {
+ if constexpr (DIR == Direction::Output) {
+ if (!EditCharacterOutput(io, *edit, x, length)) {
+ return false;
+ }
+ } else { // input
+ if (edit->descriptor != DataEdit::ListDirectedNullValue) {
+ if (EditCharacterInput(io, *edit, x, length)) {
+ anyInput = true;
+ } else {
+ return anyInput && edit->IsNamelist();
+ }
+ }
+ }
+ } else {
+ return false;
+ }
+ if (!descriptor.IncrementSubscripts(subscripts) && j + 1 < numElements) {
+ io.GetIoErrorHandler().Crash(
+ "FormattedCharacterIO: subscripts out of bounds");
+ }
+ }
+ return true;
+}
+
+template <int KIND, Direction DIR>
+inline RT_API_ATTRS bool FormattedLogicalIO(
+ IoStatementState &io, const Descriptor &descriptor) {
+ std::size_t numElements{descriptor.Elements()};
+ SubscriptValue subscripts[maxRank];
+ descriptor.GetLowerBounds(subscripts);
+ auto *listOutput{io.get_if<ListDirectedStatementState<Direction::Output>>()};
+ using IntType = CppTypeFor<TypeCategory::Integer, KIND>;
+ bool anyInput{false};
+ for (std::size_t j{0}; j < numElements; ++j) {
+ IntType &x{ExtractElement<IntType>(io, descriptor, subscripts)};
+ if (listOutput) {
+ if (!ListDirectedLogicalOutput(io, *listOutput, x != 0)) {
+ return false;
+ }
+ } else if (auto edit{io.GetNextDataEdit()}) {
+ if constexpr (DIR == Direction::Output) {
+ if (!EditLogicalOutput(io, *edit, x != 0)) {
+ return false;
+ }
+ } else {
+ if (edit->descriptor != DataEdit::ListDirectedNullValue) {
+ bool truth{};
+ if (EditLogicalInput(io, *edit, truth)) {
+ x = truth;
+ anyInput = true;
+ } else {
+ return anyInput && edit->IsNamelist();
+ }
+ }
+ }
+ } else {
+ return false;
+ }
+ if (!descriptor.IncrementSubscripts(subscripts) && j + 1 < numElements) {
+ io.GetIoErrorHandler().Crash(
+ "FormattedLogicalIO: subscripts out of bounds");
+ }
+ }
+ return true;
+}
+
+template <Direction DIR>
+RT_API_ATTRS int DerivedIoTicket<DIR>::Continue(WorkQueue &workQueue) {
+ while (!IsComplete()) {
+ if (component_->genre() == typeInfo::Component::Genre::Data) {
+ // Create a descriptor for the component
+ Descriptor &compDesc{componentDescriptor_.descriptor()};
+ component_->CreatePointerDescriptor(
+ compDesc, instance_, io_.GetIoErrorHandler(), subscripts_);
+ Advance();
+ if (int status{workQueue.BeginDescriptorIo<DIR>(
+ io_, compDesc, table_, anyIoTookPlace_)};
+ status != StatOk) {
+ return status;
+ }
+ } else {
+ // Component is itself a descriptor
+ char *pointer{
+ instance_.Element<char>(subscripts_) + component_->offset()};
+ const Descriptor &compDesc{
+ *reinterpret_cast<const Descriptor *>(pointer)};
+ Advance();
+ if (compDesc.IsAllocated()) {
+ if (int status{workQueue.BeginDescriptorIo<DIR>(
+ io_, compDesc, table_, anyIoTookPlace_)};
+ status != StatOk) {
+ return status;
+ }
+ }
+ }
+ }
+ return StatOk;
+}
+
+template RT_API_ATTRS int DerivedIoTicket<Direction::Output>::Continue(
+ WorkQueue &);
+template RT_API_ATTRS int DerivedIoTicket<Direction::Input>::Continue(
+ WorkQueue &);
+
+template <Direction DIR>
+RT_API_ATTRS int DescriptorIoTicket<DIR>::Begin(WorkQueue &workQueue) {
+ IoErrorHandler &handler{io_.GetIoErrorHandler()};
+ if (handler.InError()) {
+ return handler.GetIoStat();
+ }
+ if (!io_.get_if<IoDirectionState<DIR>>()) {
+ handler.Crash("DescriptorIO() called for wrong I/O direction");
+ return handler.GetIoStat();
+ }
+ if constexpr (DIR == Direction::Input) {
+ if (!io_.BeginReadingRecord()) {
+ return StatOk;
+ }
+ }
+ if (!io_.get_if<FormattedIoStatementState<DIR>>()) {
+ // Unformatted I/O
+ IoErrorHandler &handler{io_.GetIoErrorHandler()};
+ const DescriptorAddendum *addendum{instance_.Addendum()};
+ if (const typeInfo::DerivedType *type{
+ addendum ? addendum->derivedType() : nullptr}) {
+ // derived type unformatted I/O
+ if (DIR == Direction::Input || !io_.get_if<InquireIOLengthState>()) {
+ if (table_) {
+ if (const auto *definedIo{table_->Find(*type,
+ DIR == Direction::Input
+ ? common::DefinedIo::ReadUnformatted
+ : common::DefinedIo::WriteUnformatted)}) {
+ if (definedIo->subroutine) {
+ typeInfo::SpecialBinding special{DIR == Direction::Input
+ ? typeInfo::SpecialBinding::Which::ReadUnformatted
+ : typeInfo::SpecialBinding::Which::WriteUnformatted,
+ definedIo->subroutine, definedIo->isDtvArgPolymorphic, false,
+ false};
+ if (DefinedUnformattedIo(io_, instance_, *type, special)) {
+ anyIoTookPlace_ = true;
+ return StatOk;
+ }
+ } else {
+ int status{workQueue.BeginDerivedIo<DIR>(
+ io_, instance_, *type, table_, anyIoTookPlace_)};
+ return status == StatContinue ? StatOk : status; // done here
+ }
+ }
+ }
+ if (const typeInfo::SpecialBinding *special{
+ type->FindSpecialBinding(DIR == Direction::Input
+ ? typeInfo::SpecialBinding::Which::ReadUnformatted
+ : typeInfo::SpecialBinding::Which::WriteUnformatted)}) {
+ if (!table_ || !table_->ignoreNonTbpEntries ||
+ special->IsTypeBound()) {
+ // defined derived type unformatted I/O
+ if (DefinedUnformattedIo(io_, instance_, *type, *special)) {
+ anyIoTookPlace_ = true;
+ return StatOk;
+ } else {
+ return IostatEnd;
+ }
+ }
+ }
+ }
+ // Default derived type unformatted I/O
+ // TODO: If no component at any level has defined READ or WRITE
+ // (as appropriate), the elements are contiguous, and no byte swapping
+ // is active, do a block transfer via the code below.
+ int status{workQueue.BeginDerivedIo<DIR>(
+ io_, instance_, *type, table_, anyIoTookPlace_)};
+ return status == StatContinue ? StatOk : status; // done here
+ } else {
+ // intrinsic type unformatted I/O
+ auto *externalUnf{io_.get_if<ExternalUnformattedIoStatementState<DIR>>()};
+ ChildUnformattedIoStatementState<DIR> *childUnf{nullptr};
+ InquireIOLengthState *inq{nullptr};
+ bool swapEndianness{false};
+ if (externalUnf) {
+ swapEndianness = externalUnf->unit().swapEndianness();
+ } else {
+ childUnf = io_.get_if<ChildUnformattedIoStatementState<DIR>>();
+ if (!childUnf) {
+ inq = DIR == Direction::Output ? io_.get_if<InquireIOLengthState>()
+ : nullptr;
+ RUNTIME_CHECK(handler, inq != nullptr);
+ }
+ }
+ std::size_t elementBytes{instance_.ElementBytes()};
+ std::size_t swappingBytes{elementBytes};
+ if (auto maybeCatAndKind{instance_.type().GetCategoryAndKind()}) {
+ // Byte swapping units can be smaller than elements, namely
+ // for COMPLEX and CHARACTER.
+ if (maybeCatAndKind->first == TypeCategory::Character) {
+ // swap each character position independently
+ swappingBytes = maybeCatAndKind->second; // kind
+ } else if (maybeCatAndKind->first == TypeCategory::Complex) {
+ // swap real and imaginary components independently
+ swappingBytes /= 2;
+ }
+ }
+ using CharType =
+ std::conditional_t<DIR == Direction::Output, const char, char>;
+ auto Transfer{[=](CharType &x, std::size_t totalBytes) -> bool {
+ if constexpr (DIR == Direction::Output) {
+ return externalUnf ? externalUnf->Emit(&x, totalBytes, swappingBytes)
+ : childUnf ? childUnf->Emit(&x, totalBytes, swappingBytes)
+ : inq->Emit(&x, totalBytes, swappingBytes);
+ } else {
+ return externalUnf
+ ? externalUnf->Receive(&x, totalBytes, swappingBytes)
+ : childUnf->Receive(&x, totalBytes, swappingBytes);
+ }
+ }};
+ if (!swapEndianness &&
+ instance_.IsContiguous()) { // contiguous unformatted I/O
+ char &x{ExtractElement<char>(io_, instance_, subscripts_)};
+ if (Transfer(x, elements_ * elementBytes)) {
+ anyIoTookPlace_ = true;
+ } else {
+ return IostatEnd;
+ }
+ } else { // non-contiguous or byte-swapped intrinsic type unformatted I/O
+ for (; !IsComplete(); Advance()) {
+ char &x{ExtractElement<char>(io_, instance_, subscripts_)};
+ if (Transfer(x, elementBytes)) {
+ anyIoTookPlace_ = true;
+ } else {
+ return IostatEnd;
+ }
+ }
+ }
+ }
+ // Unformatted I/O never needs to call Continue().
+ return StatOk;
+ }
+ // Formatted I/O
+ if (auto catAndKind{instance_.type().GetCategoryAndKind()}) {
+ TypeCategory cat{catAndKind->first};
+ int kind{catAndKind->second};
+ bool any{false};
+ switch (cat) {
+ case TypeCategory::Integer:
+ switch (kind) {
+ case 1:
+ any = FormattedIntegerIO<1, DIR>(io_, instance_, true);
+ break;
+ case 2:
+ any = FormattedIntegerIO<2, DIR>(io_, instance_, true);
+ break;
+ case 4:
+ any = FormattedIntegerIO<4, DIR>(io_, instance_, true);
+ break;
+ case 8:
+ any = FormattedIntegerIO<8, DIR>(io_, instance_, true);
+ break;
+ case 16:
+ any = FormattedIntegerIO<16, DIR>(io_, instance_, true);
+ break;
+ default:
+ handler.Crash(
+ "not yet implemented: INTEGER(KIND=%d) in formatted IO", kind);
+ return IostatEnd;
+ }
+ break;
+ case TypeCategory::Unsigned:
+ switch (kind) {
+ case 1:
+ any = FormattedIntegerIO<1, DIR>(io_, instance_, false);
+ break;
+ case 2:
+ any = FormattedIntegerIO<2, DIR>(io_, instance_, false);
+ break;
+ case 4:
+ any = FormattedIntegerIO<4, DIR>(io_, instance_, false);
+ break;
+ case 8:
+ any = FormattedIntegerIO<8, DIR>(io_, instance_, false);
+ break;
+ case 16:
+ any = FormattedIntegerIO<16, DIR>(io_, instance_, false);
+ break;
+ default:
+ handler.Crash(
+ "not yet implemented: UNSIGNED(KIND=%d) in formatted IO", kind);
+ return IostatEnd;
+ }
+ break;
+ case TypeCategory::Real:
+ switch (kind) {
+ case 2:
+ any = FormattedRealIO<2, DIR>(io_, instance_);
+ break;
+ case 3:
+ any = FormattedRealIO<3, DIR>(io_, instance_);
+ break;
+ case 4:
+ any = FormattedRealIO<4, DIR>(io_, instance_);
+ break;
+ case 8:
+ any = FormattedRealIO<8, DIR>(io_, instance_);
+ break;
+ case 10:
+ any = FormattedRealIO<10, DIR>(io_, instance_);
+ break;
+ // TODO: case double/double
+ case 16:
+ any = FormattedRealIO<16, DIR>(io_, instance_);
+ break;
+ default:
+ handler.Crash(
+ "not yet implemented: REAL(KIND=%d) in formatted IO", kind);
+ return IostatEnd;
+ }
+ break;
+ case TypeCategory::Complex:
+ switch (kind) {
+ case 2:
+ any = FormattedComplexIO<2, DIR>(io_, instance_);
+ break;
+ case 3:
+ any = FormattedComplexIO<3, DIR>(io_, instance_);
+ break;
+ case 4:
+ any = FormattedComplexIO<4, DIR>(io_, instance_);
+ break;
+ case 8:
+ any = FormattedComplexIO<8, DIR>(io_, instance_);
+ break;
+ case 10:
+ any = FormattedComplexIO<10, DIR>(io_, instance_);
+ break;
+ // TODO: case double/double
+ case 16:
+ any = FormattedComplexIO<16, DIR>(io_, instance_);
+ break;
+ default:
+ handler.Crash(
+ "not yet implemented: COMPLEX(KIND=%d) in formatted IO", kind);
+ return IostatEnd;
+ }
+ break;
+ case TypeCategory::Character:
+ switch (kind) {
+ case 1:
+ any = FormattedCharacterIO<char, DIR>(io_, instance_);
+ break;
+ case 2:
+ any = FormattedCharacterIO<char16_t, DIR>(io_, instance_);
+ break;
+ case 4:
+ any = FormattedCharacterIO<char32_t, DIR>(io_, instance_);
+ break;
+ default:
+ handler.Crash(
+ "not yet implemented: CHARACTER(KIND=%d) in formatted IO", kind);
+ return IostatEnd;
+ }
+ break;
+ case TypeCategory::Logical:
+ switch (kind) {
+ case 1:
+ any = FormattedLogicalIO<1, DIR>(io_, instance_);
+ break;
+ case 2:
+ any = FormattedLogicalIO<2, DIR>(io_, instance_);
+ break;
+ case 4:
+ any = FormattedLogicalIO<4, DIR>(io_, instance_);
+ break;
+ case 8:
+ any = FormattedLogicalIO<8, DIR>(io_, instance_);
+ break;
+ default:
+ handler.Crash(
+ "not yet implemented: LOGICAL(KIND=%d) in formatted IO", kind);
+ return IostatEnd;
+ }
+ break;
+ case TypeCategory::Derived: {
+ // Derived type information must be present for formatted I/O.
+ IoErrorHandler &handler{io_.GetIoErrorHandler()};
+ const DescriptorAddendum *addendum{instance_.Addendum()};
+ RUNTIME_CHECK(handler, addendum != nullptr);
+ derived_ = addendum->derivedType();
+ RUNTIME_CHECK(handler, derived_ != nullptr);
+ if (table_) {
+ if (const auto *definedIo{table_->Find(*derived_,
+ DIR == Direction::Input ? common::DefinedIo::ReadFormatted
+ : common::DefinedIo::WriteFormatted)}) {
+ if (definedIo->subroutine) {
+ nonTbpSpecial_.emplace(DIR == Direction::Input
+ ? typeInfo::SpecialBinding::Which::ReadFormatted
+ : typeInfo::SpecialBinding::Which::WriteFormatted,
+ definedIo->subroutine, definedIo->isDtvArgPolymorphic, false,
+ false);
+ special_ = &*nonTbpSpecial_;
+ }
+ }
+ }
+ if (!special_) {
+ if (const typeInfo::SpecialBinding *binding{
+ derived_->FindSpecialBinding(DIR == Direction::Input
+ ? typeInfo::SpecialBinding::Which::ReadFormatted
+ : typeInfo::SpecialBinding::Which::WriteFormatted)}) {
+ if (!table_ || !table_->ignoreNonTbpEntries ||
+ binding->IsTypeBound()) {
+ special_ = binding;
+ }
+ }
+ }
+ return StatContinue;
+ }
+ }
+ if (any) {
+ anyIoTookPlace_ = true;
+ } else {
+ return IostatEnd;
+ }
+ } else {
+ handler.Crash("DescriptorIO: bad type code (%d) in descriptor",
+ static_cast<int>(instance_.type().raw()));
+ return handler.GetIoStat();
+ }
+ return StatOk;
+}
+
+template RT_API_ATTRS int DescriptorIoTicket<Direction::Output>::Begin(
+ WorkQueue &);
+template RT_API_ATTRS int DescriptorIoTicket<Direction::Input>::Begin(
+ WorkQueue &);
+
+template <Direction DIR>
+RT_API_ATTRS int DescriptorIoTicket<DIR>::Continue(WorkQueue &workQueue) {
+ // Only derived type formatted I/O gets here.
+ while (!IsComplete()) {
+ if (special_) {
+ if (auto defined{DefinedFormattedIo(
+ io_, instance_, *derived_, *special_, subscripts_)}) {
+ anyIoTookPlace_ |= *defined;
+ Advance();
+ continue;
+ }
+ }
+ Descriptor &elementDesc{elementDescriptor_.descriptor()};
+ elementDesc.Establish(
+ *derived_, nullptr, 0, nullptr, CFI_attribute_pointer);
+ elementDesc.set_base_addr(instance_.Element<char>(subscripts_));
+ Advance();
+ if (int status{workQueue.BeginDerivedIo<DIR>(
+ io_, elementDesc, *derived_, table_, anyIoTookPlace_)};
+ status != StatOk) {
+ return status;
+ }
+ }
+ return StatOk;
+}
+
+template RT_API_ATTRS int DescriptorIoTicket<Direction::Output>::Continue(
+ WorkQueue &);
+template RT_API_ATTRS int DescriptorIoTicket<Direction::Input>::Continue(
+ WorkQueue &);
+
+template <Direction DIR>
+RT_API_ATTRS bool DescriptorIO(IoStatementState &io,
+ const Descriptor &descriptor, const NonTbpDefinedIoTable *table) {
+ bool anyIoTookPlace{false};
+ WorkQueue workQueue{io.GetIoErrorHandler()};
+ if (workQueue.BeginDescriptorIo<DIR>(io, descriptor, table, anyIoTookPlace) ==
+ StatContinue) {
+ workQueue.Run();
+ }
+ return anyIoTookPlace;
+}
+
+template RT_API_ATTRS bool DescriptorIO<Direction::Output>(
+ IoStatementState &, const Descriptor &, const NonTbpDefinedIoTable *);
+template RT_API_ATTRS bool DescriptorIO<Direction::Input>(
+ IoStatementState &, const Descriptor &, const NonTbpDefinedIoTable *);
+
+RT_OFFLOAD_API_GROUP_END
+} // namespace Fortran::runtime::io::descr
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/descriptor-io.h b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/descriptor-io.h
new file mode 100644
index 00000000000..88ad59bd24b
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/descriptor-io.h
@@ -0,0 +1,35 @@
+//===-- lib/runtime/descriptor-io.h -----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FLANG_RT_RUNTIME_DESCRIPTOR_IO_H_
+#define FLANG_RT_RUNTIME_DESCRIPTOR_IO_H_
+
+#include "flang-rt/runtime/connection.h"
+
+namespace Fortran::runtime {
+class Descriptor;
+} // namespace Fortran::runtime
+
+namespace Fortran::runtime::io {
+class IoStatementState;
+struct NonTbpDefinedIoTable;
+} // namespace Fortran::runtime::io
+
+namespace Fortran::runtime::io::descr {
+
+template <Direction DIR>
+RT_API_ATTRS bool DescriptorIO(IoStatementState &, const Descriptor &,
+ const NonTbpDefinedIoTable * = nullptr);
+
+extern template RT_API_ATTRS bool DescriptorIO<Direction::Output>(
+ IoStatementState &, const Descriptor &, const NonTbpDefinedIoTable *);
+extern template RT_API_ATTRS bool DescriptorIO<Direction::Input>(
+ IoStatementState &, const Descriptor &, const NonTbpDefinedIoTable *);
+
+} // namespace Fortran::runtime::io::descr
+#endif // FLANG_RT_RUNTIME_DESCRIPTOR_IO_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/descriptor.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/descriptor.cpp
new file mode 100644
index 00000000000..b723acdd27b
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/descriptor.cpp
@@ -0,0 +1,329 @@
+//===-- lib/runtime/descriptor.cpp ------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang-rt/runtime/descriptor.h"
+#include "ISO_Fortran_util.h"
+#include "memory.h"
+#include "flang-rt/runtime/allocator-registry.h"
+#include "flang-rt/runtime/derived.h"
+#include "flang-rt/runtime/stat.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/type-info.h"
+#include "flang/Common/type-kinds.h"
+#include <cassert>
+#include <cstdlib>
+#include <cstring>
+
+namespace Fortran::runtime {
+
+RT_OFFLOAD_API_GROUP_BEGIN
+
+RT_API_ATTRS Descriptor::Descriptor(const Descriptor &that) { *this = that; }
+
+RT_API_ATTRS Descriptor &Descriptor::operator=(const Descriptor &that) {
+ std::memcpy(reinterpret_cast<void *>(this), &that, that.SizeInBytes());
+ return *this;
+}
+
+RT_API_ATTRS void Descriptor::Establish(TypeCode t, std::size_t elementBytes,
+ void *p, int rank, const SubscriptValue *extent,
+ ISO::CFI_attribute_t attribute, bool addendum) {
+ Terminator terminator{__FILE__, __LINE__};
+ int cfiStatus{ISO::VerifyEstablishParameters(&raw_, p, attribute, t.raw(),
+ elementBytes, rank, extent, /*external=*/false)};
+ if (cfiStatus != CFI_SUCCESS) {
+ terminator.Crash(
+ "Descriptor::Establish: CFI_establish returned %d for CFI_type_t(%d)",
+ cfiStatus, t.raw());
+ }
+ ISO::EstablishDescriptor(
+ &raw_, p, attribute, t.raw(), elementBytes, rank, extent);
+ if (elementBytes == 0) {
+ raw_.elem_len = 0;
+ // Reset byte strides of the dimensions, since EstablishDescriptor()
+ // only does that when the base address is not nullptr.
+ for (int j{0}; j < rank; ++j) {
+ GetDimension(j).SetByteStride(0);
+ }
+ }
+ if (addendum) {
+ SetHasAddendum();
+ }
+ DescriptorAddendum *a{Addendum()};
+ RUNTIME_CHECK(terminator, addendum == (a != nullptr));
+ if (a) {
+ new (a) DescriptorAddendum{};
+ }
+}
+
+RT_API_ATTRS std::size_t Descriptor::BytesFor(TypeCategory category, int kind) {
+ Terminator terminator{__FILE__, __LINE__};
+ int bytes{common::TypeSizeInBytes(category, kind)};
+ RUNTIME_CHECK(terminator, bytes > 0);
+ return bytes;
+}
+
+RT_API_ATTRS void Descriptor::Establish(TypeCategory c, int kind, void *p,
+ int rank, const SubscriptValue *extent, ISO::CFI_attribute_t attribute,
+ bool addendum) {
+ Establish(TypeCode(c, kind), BytesFor(c, kind), p, rank, extent, attribute,
+ addendum);
+}
+
+RT_API_ATTRS void Descriptor::Establish(int characterKind,
+ std::size_t characters, void *p, int rank, const SubscriptValue *extent,
+ ISO::CFI_attribute_t attribute, bool addendum) {
+ Establish(TypeCode{TypeCategory::Character, characterKind},
+ characterKind * characters, p, rank, extent, attribute, addendum);
+}
+
+RT_API_ATTRS void Descriptor::Establish(const typeInfo::DerivedType &dt,
+ void *p, int rank, const SubscriptValue *extent,
+ ISO::CFI_attribute_t attribute) {
+ std::size_t elementBytes{dt.sizeInBytes()};
+ ISO::EstablishDescriptor(
+ &raw_, p, attribute, CFI_type_struct, elementBytes, rank, extent);
+ if (elementBytes == 0) {
+ raw_.elem_len = 0;
+ // Reset byte strides of the dimensions, since EstablishDescriptor()
+ // only does that when the base address is not nullptr.
+ for (int j{0}; j < rank; ++j) {
+ GetDimension(j).SetByteStride(0);
+ }
+ }
+ SetHasAddendum();
+ new (Addendum()) DescriptorAddendum{&dt};
+}
+
+RT_API_ATTRS OwningPtr<Descriptor> Descriptor::Create(TypeCode t,
+ std::size_t elementBytes, void *p, int rank, const SubscriptValue *extent,
+ ISO::CFI_attribute_t attribute, bool addendum,
+ const typeInfo::DerivedType *dt) {
+ Terminator terminator{__FILE__, __LINE__};
+ RUNTIME_CHECK(terminator, t.IsDerived() == (dt != nullptr));
+ int derivedTypeLenParameters = dt ? dt->LenParameters() : 0;
+ std::size_t bytes{SizeInBytes(rank, addendum, derivedTypeLenParameters)};
+ Descriptor *result{
+ reinterpret_cast<Descriptor *>(AllocateMemoryOrCrash(terminator, bytes))};
+ if (dt) {
+ result->Establish(*dt, p, rank, extent, attribute);
+ } else {
+ result->Establish(t, elementBytes, p, rank, extent, attribute, addendum);
+ }
+ return OwningPtr<Descriptor>{result};
+}
+
+RT_API_ATTRS OwningPtr<Descriptor> Descriptor::Create(TypeCategory c, int kind,
+ void *p, int rank, const SubscriptValue *extent,
+ ISO::CFI_attribute_t attribute) {
+ return Create(
+ TypeCode(c, kind), BytesFor(c, kind), p, rank, extent, attribute);
+}
+
+RT_API_ATTRS OwningPtr<Descriptor> Descriptor::Create(int characterKind,
+ SubscriptValue characters, void *p, int rank, const SubscriptValue *extent,
+ ISO::CFI_attribute_t attribute) {
+ return Create(TypeCode{TypeCategory::Character, characterKind},
+ characterKind * characters, p, rank, extent, attribute);
+}
+
+RT_API_ATTRS OwningPtr<Descriptor> Descriptor::Create(
+ const typeInfo::DerivedType &dt, void *p, int rank,
+ const SubscriptValue *extent, ISO::CFI_attribute_t attribute) {
+ return Create(TypeCode{TypeCategory::Derived, 0}, dt.sizeInBytes(), p, rank,
+ extent, attribute, /*addendum=*/true, &dt);
+}
+
+RT_API_ATTRS std::size_t Descriptor::SizeInBytes() const {
+ const DescriptorAddendum *addendum{Addendum()};
+ std::size_t bytes{ sizeof *this - sizeof(Dimension) + raw_.rank * sizeof(Dimension) +
+ (addendum ? addendum->SizeInBytes() : 0)};
+ assert (bytes <= MaxDescriptorSizeInBytes(raw_.rank,addendum) && "Descriptor must fit compiler-allocated space");
+ return bytes;
+}
+
+RT_API_ATTRS std::size_t Descriptor::Elements() const {
+ return InlineElements();
+}
+
+RT_API_ATTRS int Descriptor::Allocate(std::int64_t *asyncObject) {
+ std::size_t elementBytes{ElementBytes()};
+ if (static_cast<std::int64_t>(elementBytes) < 0) {
+ // F'2023 7.4.4.2 p5: "If the character length parameter value evaluates
+ // to a negative value, the length of character entities declared is zero."
+ elementBytes = raw_.elem_len = 0;
+ }
+ std::size_t byteSize{Elements() * elementBytes};
+ AllocFct alloc{allocatorRegistry.GetAllocator(MapAllocIdx())};
+ // Zero size allocation is possible in Fortran and the resulting
+ // descriptor must be allocated/associated. Since std::malloc(0)
+ // result is implementation defined, always allocate at least one byte.
+ void *p{alloc(byteSize ? byteSize : 1, asyncObject)};
+ if (!p) {
+ return CFI_ERROR_MEM_ALLOCATION;
+ }
+ // TODO: image synchronization
+ raw_.base_addr = p;
+ SetByteStrides();
+ return 0;
+}
+
+RT_API_ATTRS void Descriptor::SetByteStrides() {
+ if (int dims{rank()}) {
+ std::size_t stride{ElementBytes()};
+ for (int j{0}; j < dims; ++j) {
+ auto &dimension{GetDimension(j)};
+ dimension.SetByteStride(stride);
+ stride *= dimension.Extent();
+ }
+ }
+}
+
+RT_API_ATTRS int Descriptor::Destroy(
+ bool finalize, bool destroyPointers, Terminator *terminator) {
+ if (!destroyPointers && raw_.attribute == CFI_attribute_pointer) {
+ return StatOk;
+ } else {
+ if (auto *addendum{Addendum()}) {
+ if (const auto *derived{addendum->derivedType()}) {
+ if (!derived->noDestructionNeeded()) {
+ runtime::Destroy(*this, finalize, *derived, terminator);
+ }
+ }
+ }
+ return Deallocate();
+ }
+}
+
+RT_API_ATTRS bool Descriptor::DecrementSubscripts(
+ SubscriptValue *subscript, const int *permutation) const {
+ for (int j{raw_.rank - 1}; j >= 0; --j) {
+ int k{permutation ? permutation[j] : j};
+ const Dimension &dim{GetDimension(k)};
+ if (--subscript[k] >= dim.LowerBound()) {
+ return true;
+ }
+ subscript[k] = dim.UpperBound();
+ }
+ return false;
+}
+
+RT_API_ATTRS std::size_t Descriptor::ZeroBasedElementNumber(
+ const SubscriptValue *subscript, const int *permutation) const {
+ std::size_t result{0};
+ std::size_t coefficient{1};
+ for (int j{0}; j < raw_.rank; ++j) {
+ int k{permutation ? permutation[j] : j};
+ const Dimension &dim{GetDimension(k)};
+ result += coefficient * (subscript[k] - dim.LowerBound());
+ coefficient *= dim.Extent();
+ }
+ return result;
+}
+
+RT_API_ATTRS bool Descriptor::EstablishPointerSection(const Descriptor &source,
+ const SubscriptValue *lower, const SubscriptValue *upper,
+ const SubscriptValue *stride) {
+ *this = source;
+ raw_.attribute = CFI_attribute_pointer;
+ int newRank{raw_.rank};
+ for (int j{0}; j < raw_.rank; ++j) {
+ if (!stride || stride[j] == 0) {
+ if (newRank > 0) {
+ --newRank;
+ } else {
+ return false;
+ }
+ }
+ }
+ raw_.rank = newRank;
+ if (const auto *sourceAddendum = source.Addendum()) {
+ if (auto *addendum{Addendum()}) {
+ *addendum = *sourceAddendum;
+ } else {
+ return false;
+ }
+ }
+ return CFI_section(&raw_, &source.raw_, lower, upper, stride) == CFI_SUCCESS;
+}
+
+RT_API_ATTRS void Descriptor::ApplyMold(const Descriptor &mold, int rank) {
+ raw_.elem_len = mold.raw_.elem_len;
+ raw_.rank = rank;
+ raw_.type = mold.raw_.type;
+ for (int j{0}; j < rank && j < mold.raw_.rank; ++j) {
+ GetDimension(j) = mold.GetDimension(j);
+ }
+ if (auto *addendum{Addendum()}) {
+ if (auto *moldAddendum{mold.Addendum()}) {
+ *addendum = *moldAddendum;
+ } else {
+ INTERNAL_CHECK(!addendum->derivedType());
+ }
+ }
+}
+
+RT_API_ATTRS void Descriptor::Check() const {
+ // TODO
+}
+
+void Descriptor::Dump(FILE *f) const {
+ std::fprintf(f, "Descriptor @ %p:\n", reinterpret_cast<const void *>(this));
+ std::fprintf(f, " base_addr %p\n", raw_.base_addr);
+ std::fprintf(f, " elem_len %zd\n", static_cast<std::size_t>(raw_.elem_len));
+ std::fprintf(f, " version %d\n", static_cast<int>(raw_.version));
+ std::fprintf(f, " rank %d\n", static_cast<int>(raw_.rank));
+ std::fprintf(f, " type %d\n", static_cast<int>(raw_.type));
+ std::fprintf(f, " attribute %d\n", static_cast<int>(raw_.attribute));
+ std::fprintf(f, " extra %d\n", static_cast<int>(raw_.extra));
+ std::fprintf(f, " addendum %d\n", static_cast<int>(HasAddendum()));
+ std::fprintf(f, " alloc_idx %d\n", static_cast<int>(GetAllocIdx()));
+ for (int j{0}; j < raw_.rank; ++j) {
+ std::fprintf(f, " dim[%d] lower_bound %jd\n", j,
+ static_cast<std::intmax_t>(raw_.dim[j].lower_bound));
+ std::fprintf(f, " extent %jd\n",
+ static_cast<std::intmax_t>(raw_.dim[j].extent));
+ std::fprintf(f, " sm %jd\n",
+ static_cast<std::intmax_t>(raw_.dim[j].sm));
+ }
+ if (const DescriptorAddendum * addendum{Addendum()}) {
+ addendum->Dump(f);
+ }
+}
+
+RT_API_ATTRS DescriptorAddendum &DescriptorAddendum::operator=(
+ const DescriptorAddendum &that) {
+ derivedType_ = that.derivedType_;
+ auto lenParms{that.LenParameters()};
+ for (std::size_t j{0}; j < lenParms; ++j) {
+ len_[j] = that.len_[j];
+ }
+ return *this;
+}
+
+RT_API_ATTRS std::size_t DescriptorAddendum::SizeInBytes() const {
+ return SizeInBytes(LenParameters());
+}
+
+RT_API_ATTRS std::size_t DescriptorAddendum::LenParameters() const {
+ const auto *type{derivedType()};
+ return type ? type->LenParameters() : 0;
+}
+
+void DescriptorAddendum::Dump(FILE *f) const {
+ std::fprintf(
+ f, " derivedType @ %p\n", reinterpret_cast<const void *>(derivedType()));
+ std::size_t lenParms{LenParameters()};
+ for (std::size_t j{0}; j < lenParms; ++j) {
+ std::fprintf(f, " len[%zd] %jd\n", j, static_cast<std::intmax_t>(len_[j]));
+ }
+}
+
+RT_OFFLOAD_API_GROUP_END
+
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/dot-product.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/dot-product.cpp
new file mode 100644
index 00000000000..20612f1876c
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/dot-product.cpp
@@ -0,0 +1,259 @@
+//===-- lib/runtime/dot-product.cpp -----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "float.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+#include "flang/Common/float128.h"
+#include "flang/Runtime/cpp-type.h"
+#include "flang/Runtime/reduction.h"
+#include <cfloat>
+#include <cinttypes>
+
+namespace Fortran::runtime {
+
+// Beware: DOT_PRODUCT of COMPLEX data uses the complex conjugate of the first
+// argument; MATMUL does not.
+
+// General accumulator for any type and stride; this is not used for
+// contiguous numeric vectors.
+template <TypeCategory RCAT, int RKIND, typename XT, typename YT>
+class Accumulator {
+public:
+ using Result = AccumulationType<RCAT, RKIND>;
+ RT_API_ATTRS Accumulator(const Descriptor &x, const Descriptor &y)
+ : x_{x}, y_{y} {}
+ RT_API_ATTRS void AccumulateIndexed(SubscriptValue xAt, SubscriptValue yAt) {
+ if constexpr (RCAT == TypeCategory::Logical) {
+ sum_ = sum_ ||
+ (IsLogicalElementTrue(x_, &xAt) && IsLogicalElementTrue(y_, &yAt));
+ } else {
+ const XT &xElement{*x_.Element<XT>(&xAt)};
+ const YT &yElement{*y_.Element<YT>(&yAt)};
+ if constexpr (RCAT == TypeCategory::Complex) {
+ sum_ += rtcmplx::conj(static_cast<Result>(xElement)) *
+ static_cast<Result>(yElement);
+ } else {
+ sum_ += static_cast<Result>(xElement) * static_cast<Result>(yElement);
+ }
+ }
+ }
+ RT_API_ATTRS Result GetResult() const { return sum_; }
+
+private:
+ const Descriptor &x_, &y_;
+ Result sum_{};
+};
+
+template <TypeCategory RCAT, int RKIND, typename XT, typename YT>
+static inline RT_API_ATTRS CppTypeFor<RCAT, RKIND> DoDotProduct(
+ const Descriptor &x, const Descriptor &y, Terminator &terminator) {
+ using Result = CppTypeFor<RCAT, RKIND>;
+ RUNTIME_CHECK(terminator, x.rank() == 1 && y.rank() == 1);
+ SubscriptValue n{x.GetDimension(0).Extent()};
+ if (SubscriptValue yN{y.GetDimension(0).Extent()}; yN != n) {
+ terminator.Crash(
+ "DOT_PRODUCT: SIZE(VECTOR_A) is %jd but SIZE(VECTOR_B) is %jd",
+ static_cast<std::intmax_t>(n), static_cast<std::intmax_t>(yN));
+ }
+ if constexpr (RCAT != TypeCategory::Logical) {
+ if (x.GetDimension(0).ByteStride() == sizeof(XT) &&
+ y.GetDimension(0).ByteStride() == sizeof(YT)) {
+ // Contiguous numeric vectors
+ if constexpr (std::is_same_v<XT, YT>) {
+ // Contiguous homogeneous numeric vectors
+ if constexpr (std::is_same_v<XT, float>) {
+ // TODO: call BLAS-1 SDOT or SDSDOT
+ } else if constexpr (std::is_same_v<XT, double>) {
+ // TODO: call BLAS-1 DDOT
+ } else if constexpr (std::is_same_v<XT, rtcmplx::complex<float>>) {
+ // TODO: call BLAS-1 CDOTC
+ } else if constexpr (std::is_same_v<XT, rtcmplx::complex<double>>) {
+ // TODO: call BLAS-1 ZDOTC
+ }
+ }
+ XT *xp{x.OffsetElement<XT>(0)};
+ YT *yp{y.OffsetElement<YT>(0)};
+ using AccumType = AccumulationType<RCAT, RKIND>;
+ AccumType accum{};
+ if constexpr (RCAT == TypeCategory::Complex) {
+ for (SubscriptValue j{0}; j < n; ++j) {
+ // conj() may instantiate its argument twice,
+ // so xp has to be incremented separately.
+ // This is a workaround for an alleged bug in clang,
+ // that shows up as:
+ // warning: multiple unsequenced modifications to 'xp'
+ accum += rtcmplx::conj(static_cast<AccumType>(*xp)) *
+ static_cast<AccumType>(*yp++);
+ xp++;
+ }
+ } else {
+ for (SubscriptValue j{0}; j < n; ++j) {
+ accum +=
+ static_cast<AccumType>(*xp++) * static_cast<AccumType>(*yp++);
+ }
+ }
+ return static_cast<Result>(accum);
+ }
+ }
+ // Non-contiguous, heterogeneous, & LOGICAL cases
+ SubscriptValue xAt{x.GetDimension(0).LowerBound()};
+ SubscriptValue yAt{y.GetDimension(0).LowerBound()};
+ Accumulator<RCAT, RKIND, XT, YT> accumulator{x, y};
+ for (SubscriptValue j{0}; j < n; ++j) {
+ accumulator.AccumulateIndexed(xAt++, yAt++);
+ }
+ return static_cast<Result>(accumulator.GetResult());
+}
+
+template <TypeCategory RCAT, int RKIND> struct DotProduct {
+ using Result = CppTypeFor<RCAT, RKIND>;
+ template <TypeCategory XCAT, int XKIND> struct DP1 {
+ template <TypeCategory YCAT, int YKIND> struct DP2 {
+ RT_API_ATTRS Result operator()(const Descriptor &x, const Descriptor &y,
+ Terminator &terminator) const {
+ if constexpr (constexpr auto resultType{
+ GetResultType(XCAT, XKIND, YCAT, YKIND)}) {
+ if constexpr (resultType->first == RCAT &&
+ (resultType->second <= RKIND || RCAT == TypeCategory::Logical)) {
+ return DoDotProduct<RCAT, RKIND, CppTypeFor<XCAT, XKIND>,
+ CppTypeFor<YCAT, YKIND>>(x, y, terminator);
+ }
+ }
+ terminator.Crash(
+ "DOT_PRODUCT(%d(%d)): bad operand types (%d(%d), %d(%d))",
+ static_cast<int>(RCAT), RKIND, static_cast<int>(XCAT), XKIND,
+ static_cast<int>(YCAT), YKIND);
+ }
+ };
+ RT_API_ATTRS Result operator()(const Descriptor &x, const Descriptor &y,
+ Terminator &terminator, TypeCategory yCat, int yKind) const {
+ return ApplyType<DP2, Result>(yCat, yKind, terminator, x, y, terminator);
+ }
+ };
+ RT_API_ATTRS Result operator()(const Descriptor &x, const Descriptor &y,
+ const char *source, int line) const {
+ Terminator terminator{source, line};
+ if (RCAT != TypeCategory::Logical && x.type() == y.type()) {
+ // No conversions needed, operands and result have same known type
+ return typename DP1<RCAT, RKIND>::template DP2<RCAT, RKIND>{}(
+ x, y, terminator);
+ } else {
+ auto xCatKind{x.type().GetCategoryAndKind()};
+ auto yCatKind{y.type().GetCategoryAndKind()};
+ RUNTIME_CHECK(terminator, xCatKind.has_value() && yCatKind.has_value());
+ return ApplyType<DP1, Result>(xCatKind->first, xCatKind->second,
+ terminator, x, y, terminator, yCatKind->first, yCatKind->second);
+ }
+ }
+};
+
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+CppTypeFor<TypeCategory::Integer, 1> RTDEF(DotProductInteger1)(
+ const Descriptor &x, const Descriptor &y, const char *source, int line) {
+ return DotProduct<TypeCategory::Integer, 1>{}(x, y, source, line);
+}
+CppTypeFor<TypeCategory::Integer, 2> RTDEF(DotProductInteger2)(
+ const Descriptor &x, const Descriptor &y, const char *source, int line) {
+ return DotProduct<TypeCategory::Integer, 2>{}(x, y, source, line);
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(DotProductInteger4)(
+ const Descriptor &x, const Descriptor &y, const char *source, int line) {
+ return DotProduct<TypeCategory::Integer, 4>{}(x, y, source, line);
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(DotProductInteger8)(
+ const Descriptor &x, const Descriptor &y, const char *source, int line) {
+ return DotProduct<TypeCategory::Integer, 8>{}(x, y, source, line);
+}
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDEF(DotProductInteger16)(
+ const Descriptor &x, const Descriptor &y, const char *source, int line) {
+ return DotProduct<TypeCategory::Integer, 16>{}(x, y, source, line);
+}
+#endif
+
+CppTypeFor<TypeCategory::Unsigned, 1> RTDEF(DotProductUnsigned1)(
+ const Descriptor &x, const Descriptor &y, const char *source, int line) {
+ return DotProduct<TypeCategory::Unsigned, 1>{}(x, y, source, line);
+}
+CppTypeFor<TypeCategory::Unsigned, 2> RTDEF(DotProductUnsigned2)(
+ const Descriptor &x, const Descriptor &y, const char *source, int line) {
+ return DotProduct<TypeCategory::Unsigned, 2>{}(x, y, source, line);
+}
+CppTypeFor<TypeCategory::Unsigned, 4> RTDEF(DotProductUnsigned4)(
+ const Descriptor &x, const Descriptor &y, const char *source, int line) {
+ return DotProduct<TypeCategory::Unsigned, 4>{}(x, y, source, line);
+}
+CppTypeFor<TypeCategory::Unsigned, 8> RTDEF(DotProductUnsigned8)(
+ const Descriptor &x, const Descriptor &y, const char *source, int line) {
+ return DotProduct<TypeCategory::Unsigned, 8>{}(x, y, source, line);
+}
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Unsigned, 16> RTDEF(DotProductUnsigned16)(
+ const Descriptor &x, const Descriptor &y, const char *source, int line) {
+ return DotProduct<TypeCategory::Unsigned, 16>{}(x, y, source, line);
+}
+#endif
+
+// TODO: REAL/COMPLEX(2 & 3)
+// Intermediate results and operations are at least 64 bits
+CppTypeFor<TypeCategory::Real, 4> RTDEF(DotProductReal4)(
+ const Descriptor &x, const Descriptor &y, const char *source, int line) {
+ return DotProduct<TypeCategory::Real, 4>{}(x, y, source, line);
+}
+CppTypeFor<TypeCategory::Real, 8> RTDEF(DotProductReal8)(
+ const Descriptor &x, const Descriptor &y, const char *source, int line) {
+ return DotProduct<TypeCategory::Real, 8>{}(x, y, source, line);
+}
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDEF(DotProductReal10)(
+ const Descriptor &x, const Descriptor &y, const char *source, int line) {
+ return DotProduct<TypeCategory::Real, 10>{}(x, y, source, line);
+}
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppTypeFor<TypeCategory::Real, 16> RTDEF(DotProductReal16)(
+ const Descriptor &x, const Descriptor &y, const char *source, int line) {
+ return DotProduct<TypeCategory::Real, 16>{}(x, y, source, line);
+}
+#endif
+
+void RTDEF(CppDotProductComplex4)(CppTypeFor<TypeCategory::Complex, 4> &result,
+ const Descriptor &x, const Descriptor &y, const char *source, int line) {
+ result = DotProduct<TypeCategory::Complex, 4>{}(x, y, source, line);
+}
+void RTDEF(CppDotProductComplex8)(CppTypeFor<TypeCategory::Complex, 8> &result,
+ const Descriptor &x, const Descriptor &y, const char *source, int line) {
+ result = DotProduct<TypeCategory::Complex, 8>{}(x, y, source, line);
+}
+#if HAS_FLOAT80
+void RTDEF(CppDotProductComplex10)(
+ CppTypeFor<TypeCategory::Complex, 10> &result, const Descriptor &x,
+ const Descriptor &y, const char *source, int line) {
+ result = DotProduct<TypeCategory::Complex, 10>{}(x, y, source, line);
+}
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+void RTDEF(CppDotProductComplex16)(
+ CppTypeFor<TypeCategory::Complex, 16> &result, const Descriptor &x,
+ const Descriptor &y, const char *source, int line) {
+ result = DotProduct<TypeCategory::Complex, 16>{}(x, y, source, line);
+}
+#endif
+
+bool RTDEF(DotProductLogical)(
+ const Descriptor &x, const Descriptor &y, const char *source, int line) {
+ return DotProduct<TypeCategory::Logical, 1>{}(x, y, source, line);
+}
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/edit-input.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/edit-input.cpp
new file mode 100644
index 00000000000..0cc287aa3b4
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/edit-input.cpp
@@ -0,0 +1,1195 @@
+//===-- lib/runtime/edit-input.cpp ------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "edit-input.h"
+#include "flang-rt/runtime/namelist.h"
+#include "flang-rt/runtime/utf.h"
+#include "flang/Common/optional.h"
+#include "flang/Common/real.h"
+#include "flang/Common/uint128.h"
+#include "flang/Runtime/freestanding-tools.h"
+#include <algorithm>
+#include <cfenv>
+
+namespace Fortran::runtime::io {
+RT_OFFLOAD_API_GROUP_BEGIN
+
+// Checks that a list-directed input value has been entirely consumed and
+// doesn't contain unparsed characters before the next value separator.
+static inline RT_API_ATTRS bool IsCharValueSeparator(
+ const DataEdit &edit, char32_t ch) {
+ char32_t comma{
+ edit.modes.editingFlags & decimalComma ? char32_t{';'} : char32_t{','}};
+ return ch == ' ' || ch == '\t' || ch == comma || ch == '/' ||
+ (edit.IsNamelist() && (ch == '&' || ch == '$'));
+}
+
+static RT_API_ATTRS bool CheckCompleteListDirectedField(
+ IoStatementState &io, const DataEdit &edit) {
+ if (edit.IsListDirected()) {
+ std::size_t byteCount;
+ if (auto ch{io.GetCurrentChar(byteCount)}) {
+ if (IsCharValueSeparator(edit, *ch)) {
+ return true;
+ } else {
+ const auto &connection{io.GetConnectionState()};
+ io.GetIoErrorHandler().SignalError(IostatBadListDirectedInputSeparator,
+ "invalid character (0x%x) after list-directed input value, "
+ "at column %d in record %d",
+ static_cast<unsigned>(*ch),
+ static_cast<int>(connection.positionInRecord + 1),
+ static_cast<int>(connection.currentRecordNumber));
+ return false;
+ }
+ } else {
+ return true; // end of record: ok
+ }
+ } else {
+ return true;
+ }
+}
+
+static inline RT_API_ATTRS char32_t GetSeparatorChar(const DataEdit &edit) {
+ return edit.modes.editingFlags & decimalComma ? char32_t{';'} : char32_t{','};
+}
+
+template <int LOG2_BASE>
+static RT_API_ATTRS bool EditBOZInput(
+ IoStatementState &io, const DataEdit &edit, void *n, std::size_t bytes) {
+ // Skip leading white space & zeroes
+ Fortran::common::optional<int> remaining{io.CueUpInput(edit)};
+ auto start{io.GetConnectionState().positionInRecord};
+ Fortran::common::optional<char32_t> next{io.NextInField(remaining, edit)};
+ if (next.value_or('?') == '0') {
+ do {
+ start = io.GetConnectionState().positionInRecord;
+ next = io.NextInField(remaining, edit);
+ } while (next && *next == '0');
+ }
+ // Count significant digits after any leading white space & zeroes
+ int digits{0};
+ int significantBits{0};
+ const char32_t comma{GetSeparatorChar(edit)};
+ for (; next; next = io.NextInField(remaining, edit)) {
+ char32_t ch{*next};
+ if (ch == ' ' || ch == '\t') {
+ if (edit.modes.editingFlags & blankZero) {
+ ch = '0'; // BZ mode - treat blank as if it were zero
+ } else {
+ continue;
+ }
+ }
+ if (ch >= '0' && ch <= '1') {
+ } else if (LOG2_BASE >= 3 && ch >= '2' && ch <= '7') {
+ } else if (LOG2_BASE >= 4 && ch >= '8' && ch <= '9') {
+ } else if (LOG2_BASE >= 4 && ch >= 'A' && ch <= 'F') {
+ } else if (LOG2_BASE >= 4 && ch >= 'a' && ch <= 'f') {
+ } else if (ch == comma) {
+ break; // end non-list-directed field early
+ } else {
+ io.GetIoErrorHandler().SignalError(
+ "Bad character '%lc' in B/O/Z input field", ch);
+ return false;
+ }
+ if (digits++ == 0) {
+ if (ch >= '0' && ch <= '1') {
+ significantBits = 1;
+ } else if (ch >= '2' && ch <= '3') {
+ significantBits = 2;
+ } else if (ch >= '4' && ch <= '7') {
+ significantBits = 3;
+ } else {
+ significantBits = 4;
+ }
+ } else {
+ significantBits += LOG2_BASE;
+ }
+ }
+ auto significantBytes{static_cast<std::size_t>(significantBits + 7) / 8};
+ if (significantBytes > bytes) {
+ io.GetIoErrorHandler().SignalError(IostatBOZInputOverflow,
+ "B/O/Z input of %d digits overflows %zd-byte variable", digits, bytes);
+ return false;
+ }
+ // Reset to start of significant digits
+ io.HandleAbsolutePosition(start);
+ remaining.reset();
+ // Make a second pass now that the digit count is known
+ std::memset(n, 0, bytes);
+ int increment{isHostLittleEndian ? -1 : 1};
+ auto *data{reinterpret_cast<unsigned char *>(n) +
+ (isHostLittleEndian ? significantBytes - 1 : bytes - significantBytes)};
+ int bitsAfterFirstDigit{(digits - 1) * LOG2_BASE};
+ int shift{bitsAfterFirstDigit & 7};
+ if (shift + (significantBits - bitsAfterFirstDigit) > 8) {
+ shift = shift - 8; // misaligned octal
+ }
+ while (digits > 0) {
+ char32_t ch{io.NextInField(remaining, edit).value_or(' ')};
+ int digit{0};
+ if (ch == ' ' || ch == '\t') {
+ if (edit.modes.editingFlags & blankZero) {
+ ch = '0'; // BZ mode - treat blank as if it were zero
+ } else {
+ continue;
+ }
+ }
+ --digits;
+ if (ch >= '0' && ch <= '9') {
+ digit = ch - '0';
+ } else if (ch >= 'A' && ch <= 'F') {
+ digit = ch + 10 - 'A';
+ } else if (ch >= 'a' && ch <= 'f') {
+ digit = ch + 10 - 'a';
+ } else {
+ continue;
+ }
+ if (shift < 0) {
+ if (shift + LOG2_BASE > 0) { // misaligned octal
+ *data |= digit >> -shift;
+ }
+ shift += 8;
+ data += increment;
+ }
+ *data |= digit << shift;
+ shift -= LOG2_BASE;
+ }
+ return CheckCompleteListDirectedField(io, edit);
+}
+
+static inline RT_API_ATTRS char32_t GetRadixPointChar(const DataEdit &edit) {
+ return edit.modes.editingFlags & decimalComma ? char32_t{','} : char32_t{'.'};
+}
+
+// Prepares input from a field, and returns the sign, if any, else '\0'.
+static RT_API_ATTRS char ScanNumericPrefix(IoStatementState &io,
+ const DataEdit &edit, Fortran::common::optional<char32_t> &next,
+ Fortran::common::optional<int> &remaining,
+ IoStatementState::FastAsciiField *fastField = nullptr) {
+ remaining = io.CueUpInput(edit, fastField);
+ next = io.NextInField(remaining, edit, fastField);
+ char sign{'\0'};
+ if (next) {
+ if (*next == '-' || *next == '+') {
+ sign = *next;
+ if (!edit.IsListDirected()) {
+ io.SkipSpaces(remaining, fastField);
+ }
+ next = io.NextInField(remaining, edit, fastField);
+ }
+ }
+ return sign;
+}
+
+RT_API_ATTRS bool EditIntegerInput(IoStatementState &io, const DataEdit &edit,
+ void *n, int kind, bool isSigned) {
+ auto &handler{io.GetIoErrorHandler()};
+ RUNTIME_CHECK(handler, kind >= 1 && !(kind & (kind - 1)));
+ if (!n) {
+ handler.Crash("Null address for integer input item");
+ }
+ switch (edit.descriptor) {
+ case DataEdit::ListDirected:
+ if (IsNamelistNameOrSlash(io)) {
+ return false;
+ }
+ break;
+ case 'G':
+ case 'I':
+ break;
+ case 'B':
+ return EditBOZInput<1>(io, edit, n, kind);
+ case 'O':
+ return EditBOZInput<3>(io, edit, n, kind);
+ case 'Z':
+ return EditBOZInput<4>(io, edit, n, kind);
+ case 'A': // legacy extension
+ return EditCharacterInput(io, edit, reinterpret_cast<char *>(n), kind);
+ default:
+ handler.SignalError(IostatErrorInFormat,
+ "Data edit descriptor '%c' may not be used with an INTEGER data item",
+ edit.descriptor);
+ return false;
+ }
+ Fortran::common::optional<int> remaining;
+ Fortran::common::optional<char32_t> next;
+ auto fastField{io.GetUpcomingFastAsciiField()};
+ char sign{ScanNumericPrefix(io, edit, next, remaining, &fastField)};
+ if (sign == '-' && !isSigned) {
+ handler.SignalError("Negative sign in UNSIGNED input field");
+ return false;
+ }
+ common::uint128_t value{0};
+ bool any{!!sign};
+ bool overflow{false};
+ const char32_t comma{GetSeparatorChar(edit)};
+ static constexpr auto maxu128{~common::uint128_t{0}};
+ for (; next; next = io.NextInField(remaining, edit, &fastField)) {
+ char32_t ch{*next};
+ if (ch == ' ' || ch == '\t') {
+ if (edit.modes.editingFlags & blankZero) {
+ ch = '0'; // BZ mode - treat blank as if it were zero
+ } else {
+ continue;
+ }
+ }
+ int digit{0};
+ if (ch >= '0' && ch <= '9') {
+ digit = ch - '0';
+ } else if (ch == comma) {
+ break; // end non-list-directed field early
+ } else {
+ if (edit.modes.inNamelist && ch == GetRadixPointChar(edit)) {
+ // Ignore any fractional part that might appear in NAMELIST integer
+ // input, like a few other Fortran compilers do.
+ // TODO: also process exponents? Some compilers do, but they obviously
+ // can't just be ignored.
+ while ((next = io.NextInField(remaining, edit, &fastField))) {
+ if (*next < '0' || *next > '9') {
+ break;
+ }
+ }
+ if (!next || *next == comma) {
+ break;
+ }
+ }
+ handler.SignalError("Bad character '%lc' in INTEGER input field", ch);
+ return false;
+ }
+ static constexpr auto maxu128OverTen{maxu128 / 10};
+ static constexpr int maxLastDigit{
+ static_cast<int>(maxu128 - (maxu128OverTen * 10))};
+ overflow |= value >= maxu128OverTen &&
+ (value > maxu128OverTen || digit > maxLastDigit);
+ value *= 10;
+ value += digit;
+ any = true;
+ }
+ if (!any && !remaining) {
+ handler.SignalError(
+ "Integer value absent from NAMELIST or list-directed input");
+ return false;
+ }
+ if (isSigned) {
+ auto maxForKind{common::uint128_t{1} << ((8 * kind) - 1)};
+ overflow |= value >= maxForKind && (value > maxForKind || sign != '-');
+ } else {
+ auto maxForKind{maxu128 >> (((16 - kind) * 8) + (isSigned ? 1 : 0))};
+ overflow |= value >= maxForKind;
+ }
+ if (overflow) {
+ handler.SignalError(IostatIntegerInputOverflow,
+ "Decimal input overflows INTEGER(%d) variable", kind);
+ return false;
+ }
+ if (sign == '-') {
+ value = -value;
+ }
+ if (any || !handler.InError()) {
+ // The value is stored in the lower order bits on big endian platform.
+ // For memcpy, shift the value to the highest order bits.
+#if USING_NATIVE_INT128_T
+ auto shft{static_cast<int>(sizeof value - kind)};
+ if (!isHostLittleEndian && shft >= 0) {
+ auto shifted{value << (8 * shft)};
+ std::memcpy(n, &shifted, kind);
+ } else {
+ std::memcpy(n, &value, kind); // a blank field means zero
+ }
+#else
+ auto shft{static_cast<int>(sizeof(value.low())) - kind};
+ // For kind==8 (i.e. shft==0), the value is stored in low_ in big endian.
+ if (!isHostLittleEndian && shft >= 0) {
+ auto l{value.low() << (8 * shft)};
+ std::memcpy(n, &l, kind);
+ } else {
+ std::memcpy(n, &value, kind); // a blank field means zero
+ }
+#endif
+ io.GotChar(fastField.got());
+ return true;
+ } else {
+ return false;
+ }
+}
+
+// Parses a REAL input number from the input source as a normalized
+// fraction into a supplied buffer -- there's an optional '-', a
+// decimal point when the input is not hexadecimal, and at least one
+// digit. Replaces blanks with zeroes where appropriate.
+struct ScannedRealInput {
+ // Number of characters that (should) have been written to the
+ // buffer -- this can be larger than the buffer size, which
+ // indicates buffer overflow. Zero indicates an error.
+ int got{0};
+ int exponent{0}; // adjusted as necessary; binary if isHexadecimal
+ bool isHexadecimal{false}; // 0X...
+};
+static RT_API_ATTRS ScannedRealInput ScanRealInput(
+ char *buffer, int bufferSize, IoStatementState &io, const DataEdit &edit) {
+ Fortran::common::optional<int> remaining;
+ Fortran::common::optional<char32_t> next;
+ int got{0};
+ Fortran::common::optional<int> radixPointOffset;
+ // The following lambda definition violates the conding style,
+ // but cuda-11.8 nvcc hits an internal error with the brace initialization.
+ auto Put = [&](char ch) -> void {
+ if (got < bufferSize) {
+ buffer[got] = ch;
+ }
+ ++got;
+ };
+ char sign{ScanNumericPrefix(io, edit, next, remaining)};
+ if (sign == '-') {
+ Put('-');
+ }
+ bool bzMode{(edit.modes.editingFlags & blankZero) != 0};
+ int exponent{0};
+ if (!next || (!bzMode && *next == ' ') ||
+ (!(edit.modes.editingFlags & decimalComma) && *next == ',')) {
+ if (!edit.IsListDirected() && !io.GetConnectionState().IsAtEOF()) {
+ // An empty/blank field means zero when not list-directed.
+ // A fixed-width field containing only a sign is also zero;
+ // this behavior isn't standard-conforming in F'2023 but it is
+ // required to pass FCVS.
+ Put('0');
+ }
+ return {got, exponent, false};
+ }
+ char32_t radixPointChar{GetRadixPointChar(edit)};
+ char32_t first{*next >= 'a' && *next <= 'z' ? *next + 'A' - 'a' : *next};
+ bool isHexadecimal{false};
+ if (first == 'N' || first == 'I') {
+ // NaN or infinity - convert to upper case
+ // Subtle: a blank field of digits could be followed by 'E' or 'D',
+ for (; next &&
+ ((*next >= 'a' && *next <= 'z') || (*next >= 'A' && *next <= 'Z'));
+ next = io.NextInField(remaining, edit)) {
+ if (*next >= 'a' && *next <= 'z') {
+ Put(*next - 'a' + 'A');
+ } else {
+ Put(*next);
+ }
+ }
+ if (next && *next == '(') { // NaN(...)
+ Put('(');
+ int depth{1};
+ while (true) {
+ next = io.NextInField(remaining, edit);
+ if (depth == 0) {
+ break;
+ } else if (!next) {
+ return {}; // error
+ } else if (*next == '(') {
+ ++depth;
+ } else if (*next == ')') {
+ --depth;
+ }
+ Put(*next);
+ }
+ }
+ } else if (first == radixPointChar || (first >= '0' && first <= '9') ||
+ (bzMode && (first == ' ' || first == '\t')) || first == 'E' ||
+ first == 'D' || first == 'Q') {
+ if (first == '0') {
+ next = io.NextInField(remaining, edit);
+ if (next && (*next == 'x' || *next == 'X')) { // 0X...
+ isHexadecimal = true;
+ next = io.NextInField(remaining, edit);
+ } else {
+ Put('0');
+ }
+ }
+ // input field is normalized to a fraction
+ if (!isHexadecimal) {
+ Put('.');
+ }
+ auto start{got};
+ for (; next; next = io.NextInField(remaining, edit)) {
+ char32_t ch{*next};
+ if (ch == ' ' || ch == '\t') {
+ if (isHexadecimal) {
+ return {}; // error
+ } else if (bzMode) {
+ ch = '0'; // BZ mode - treat blank as if it were zero
+ } else {
+ continue; // ignore blank in fixed field
+ }
+ }
+ if (ch == '0' && got == start && !radixPointOffset) {
+ // omit leading zeroes before the radix point
+ } else if (ch >= '0' && ch <= '9') {
+ Put(ch);
+ } else if (ch == radixPointChar && !radixPointOffset) {
+ // The radix point character is *not* copied to the buffer.
+ radixPointOffset = got - start; // # of digits before the radix point
+ } else if (isHexadecimal && ch >= 'A' && ch <= 'F') {
+ Put(ch);
+ } else if (isHexadecimal && ch >= 'a' && ch <= 'f') {
+ Put(ch - 'a' + 'A'); // normalize to capitals
+ } else {
+ break;
+ }
+ }
+ if (got == start) {
+ // Nothing but zeroes and maybe a radix point. F'2018 requires
+ // at least one digit, but F'77 did not, and a bare "." shows up in
+ // the FCVS suite.
+ Put('0'); // emit at least one digit
+ }
+ // In list-directed input, a bad exponent is not consumed.
+ auto nextBeforeExponent{next};
+ auto startExponent{io.GetConnectionState().positionInRecord};
+ bool hasGoodExponent{false};
+ if (next) {
+ if (isHexadecimal) {
+ if (*next == 'p' || *next == 'P') {
+ next = io.NextInField(remaining, edit);
+ } else {
+ // The binary exponent is not optional in the standard.
+ return {}; // error
+ }
+ } else if (*next == 'e' || *next == 'E' || *next == 'd' || *next == 'D' ||
+ *next == 'q' || *next == 'Q') {
+ // Optional exponent letter. Blanks are allowed between the
+ // optional exponent letter and the exponent value.
+ io.SkipSpaces(remaining);
+ next = io.NextInField(remaining, edit);
+ }
+ }
+ if (next &&
+ (*next == '-' || *next == '+' || (*next >= '0' && *next <= '9') ||
+ *next == ' ' || *next == '\t')) {
+ bool negExpo{*next == '-'};
+ if (negExpo || *next == '+') {
+ next = io.NextInField(remaining, edit);
+ }
+ for (; next; next = io.NextInField(remaining, edit)) {
+ if (*next >= '0' && *next <= '9') {
+ hasGoodExponent = true;
+ if (exponent < 10000) {
+ exponent = 10 * exponent + *next - '0';
+ }
+ } else if (*next == ' ' || *next == '\t') {
+ if (isHexadecimal) {
+ break;
+ } else if (bzMode) {
+ hasGoodExponent = true;
+ exponent = 10 * exponent;
+ }
+ } else {
+ break;
+ }
+ }
+ if (negExpo) {
+ exponent = -exponent;
+ }
+ }
+ if (!hasGoodExponent) {
+ if (isHexadecimal) {
+ return {}; // error
+ }
+ // There isn't a good exponent; do not consume it.
+ next = nextBeforeExponent;
+ io.HandleAbsolutePosition(startExponent);
+ // The default exponent is -kP, but the scale factor doesn't affect
+ // an explicit exponent.
+ exponent = -edit.modes.scale;
+ }
+ // Adjust exponent by number of digits before the radix point.
+ if (isHexadecimal) {
+ // Exponents for hexadecimal input are binary.
+ exponent += radixPointOffset.value_or(got - start) * 4;
+ } else if (radixPointOffset) {
+ exponent += *radixPointOffset;
+ } else {
+ // When no redix point (or comma) appears in the value, the 'd'
+ // part of the edit descriptor must be interpreted as the number of
+ // digits in the value to be interpreted as being to the *right* of
+ // the assumed radix point (13.7.2.3.2)
+ exponent += got - start - edit.digits.value_or(0);
+ }
+ }
+ // Consume the trailing ')' of a list-directed or NAMELIST complex
+ // input value.
+ if (edit.descriptor == DataEdit::ListDirectedImaginaryPart) {
+ if (next && (*next == ' ' || *next == '\t')) {
+ io.SkipSpaces(remaining);
+ next = io.NextInField(remaining, edit);
+ }
+ if (!next) { // NextInField fails on separators like ')'
+ std::size_t byteCount{0};
+ next = io.GetCurrentChar(byteCount);
+ if (next && *next == ')') {
+ io.HandleRelativePosition(byteCount);
+ }
+ }
+ } else if (remaining) {
+ while (next && (*next == ' ' || *next == '\t')) {
+ next = io.NextInField(remaining, edit);
+ }
+ if (next && (*next != ',' || (edit.modes.editingFlags & decimalComma))) {
+ return {}; // error: unused nonblank character in fixed-width field
+ }
+ }
+ return {got, exponent, isHexadecimal};
+}
+
+static RT_API_ATTRS void RaiseFPExceptions(
+ decimal::ConversionResultFlags flags) {
+#undef RAISE
+#if defined(RT_DEVICE_COMPILATION)
+ Terminator terminator(__FILE__, __LINE__);
+#define RAISE(e) \
+ terminator.Crash( \
+ "not implemented yet: raising FP exception in device code: %s", #e);
+#else // !defined(RT_DEVICE_COMPILATION)
+#ifdef feraisexcept // a macro in some environments; omit std::
+#define RAISE feraiseexcept
+#else
+#define RAISE std::feraiseexcept
+#endif
+#endif // !defined(RT_DEVICE_COMPILATION)
+
+// Some environment (e.g. emscripten, musl) don't define FE_OVERFLOW as allowed
+// by c99 (but not c++11) :-/
+#if defined(FE_OVERFLOW) || defined(RT_DEVICE_COMPILATION)
+ if (flags & decimal::ConversionResultFlags::Overflow) {
+ RAISE(FE_OVERFLOW);
+ }
+#endif
+#if defined(FE_UNDERFLOW) || defined(RT_DEVICE_COMPILATION)
+ if (flags & decimal::ConversionResultFlags::Underflow) {
+ RAISE(FE_UNDERFLOW);
+ }
+#endif
+#if defined(FE_INEXACT) || defined(RT_DEVICE_COMPILATION)
+ if (flags & decimal::ConversionResultFlags::Inexact) {
+ RAISE(FE_INEXACT);
+ }
+#endif
+#if defined(FE_INVALID) || defined(RT_DEVICE_COMPILATION)
+ if (flags & decimal::ConversionResultFlags::Invalid) {
+ RAISE(FE_INVALID);
+ }
+#endif
+#undef RAISE
+}
+
+// If no special modes are in effect and the form of the input value
+// that's present in the input stream is acceptable to the decimal->binary
+// converter without modification, this fast path for real input
+// saves time by avoiding memory copies and reformatting of the exponent.
+template <int PRECISION>
+static RT_API_ATTRS bool TryFastPathRealDecimalInput(
+ IoStatementState &io, const DataEdit &edit, void *n) {
+ if (edit.modes.editingFlags & (blankZero | decimalComma)) {
+ return false;
+ }
+ if (edit.modes.scale != 0) {
+ return false;
+ }
+ const ConnectionState &connection{io.GetConnectionState()};
+ if (connection.internalIoCharKind > 1) {
+ return false; // reading non-default character
+ }
+ const char *str{nullptr};
+ std::size_t got{io.GetNextInputBytes(str)};
+ if (got == 0 || str == nullptr || !connection.recordLength.has_value()) {
+ return false; // could not access reliably-terminated input stream
+ }
+ const char *p{str};
+ std::int64_t maxConsume{
+ std::min<std::int64_t>(got, edit.width.value_or(got))};
+ const char *limit{str + maxConsume};
+ decimal::ConversionToBinaryResult<PRECISION> converted{
+ decimal::ConvertToBinary<PRECISION>(p, edit.modes.round, limit)};
+ if (converted.flags & (decimal::Invalid | decimal::Overflow)) {
+ return false;
+ }
+ if (edit.digits.value_or(0) != 0) {
+ // Edit descriptor is Fw.d (or other) with d != 0, which
+ // implies scaling
+ const char *q{str};
+ for (; q < limit; ++q) {
+ if (*q == '.' || *q == 'n' || *q == 'N') {
+ break;
+ }
+ }
+ if (q == limit) {
+ // No explicit decimal point, and not NaN/Inf.
+ return false;
+ }
+ }
+ if (edit.descriptor == DataEdit::ListDirectedImaginaryPart) {
+ // Need to consume a trailing ')', possibly with leading spaces
+ for (; p < limit && (*p == ' ' || *p == '\t'); ++p) {
+ }
+ if (p < limit && *p == ')') {
+ ++p;
+ } else {
+ return false;
+ }
+ } else if (edit.IsListDirected()) {
+ if (p < limit && !IsCharValueSeparator(edit, *p)) {
+ return false;
+ }
+ } else {
+ for (; p < limit && (*p == ' ' || *p == '\t'); ++p) {
+ }
+ if (edit.width && p < str + *edit.width) {
+ return false; // unconverted characters remain in fixed width field
+ }
+ }
+ // Success on the fast path!
+ *reinterpret_cast<decimal::BinaryFloatingPointNumber<PRECISION> *>(n) =
+ converted.binary;
+ io.HandleRelativePosition(p - str);
+ // Set FP exception flags
+ if (converted.flags != decimal::ConversionResultFlags::Exact) {
+ RaiseFPExceptions(converted.flags);
+ }
+ return true;
+}
+
+template <int binaryPrecision>
+RT_API_ATTRS decimal::ConversionToBinaryResult<binaryPrecision>
+ConvertHexadecimal(
+ const char *&p, enum decimal::FortranRounding rounding, int expo) {
+ using RealType = decimal::BinaryFloatingPointNumber<binaryPrecision>;
+ using RawType = typename RealType::RawType;
+ bool isNegative{*p == '-'};
+ constexpr RawType one{1};
+ RawType signBit{0};
+ if (isNegative) {
+ ++p;
+ signBit = one << (RealType::bits - 1);
+ }
+ RawType fraction{0};
+ // Adjust the incoming binary P+/- exponent to shift the radix point
+ // to below the LSB and add in the bias.
+ expo += binaryPrecision - 1 + RealType::exponentBias;
+ // Input the fraction.
+ int roundingBit{0};
+ int guardBit{0};
+ for (; *p; ++p) {
+ fraction <<= 4;
+ expo -= 4;
+ if (*p >= '0' && *p <= '9') {
+ fraction |= *p - '0';
+ } else if (*p >= 'A' && *p <= 'F') {
+ fraction |= *p - 'A' + 10; // data were normalized to capitals
+ } else {
+ break;
+ }
+ if (fraction >> binaryPrecision) {
+ while (fraction >> binaryPrecision) {
+ guardBit |= roundingBit;
+ roundingBit = (int)fraction & 1;
+ fraction >>= 1;
+ ++expo;
+ }
+ // Consume excess digits
+ while (*++p) {
+ if (*p == '0') {
+ } else if ((*p >= '1' && *p <= '9') || (*p >= 'A' && *p <= 'F')) {
+ guardBit = 1;
+ } else {
+ break;
+ }
+ }
+ break;
+ }
+ }
+ if (fraction) {
+ // Boost biased expo if too small
+ while (expo < 1) {
+ guardBit |= roundingBit;
+ roundingBit = (int)fraction & 1;
+ fraction >>= 1;
+ ++expo;
+ }
+ // Normalize
+ while (expo > 1 && !(fraction >> (binaryPrecision - 1))) {
+ fraction <<= 1;
+ --expo;
+ guardBit = roundingBit = 0;
+ }
+ }
+ // Rounding
+ bool increase{false};
+ switch (rounding) {
+ case decimal::RoundNearest: // RN & RP
+ increase = roundingBit && (guardBit | ((int)fraction & 1));
+ break;
+ case decimal::RoundUp: // RU
+ increase = !isNegative && (roundingBit | guardBit);
+ break;
+ case decimal::RoundDown: // RD
+ increase = isNegative && (roundingBit | guardBit);
+ break;
+ case decimal::RoundToZero: // RZ
+ break;
+ case decimal::RoundCompatible: // RC
+ increase = roundingBit != 0;
+ break;
+ }
+ if (increase) {
+ ++fraction;
+ if (fraction >> binaryPrecision) {
+ fraction >>= 1;
+ ++expo;
+ }
+ }
+ // Package & return result
+ constexpr RawType significandMask{(one << RealType::significandBits) - 1};
+ int flags{(roundingBit | guardBit) ? decimal::Inexact : decimal::Exact};
+ if (!fraction) {
+ expo = 0;
+ } else if (expo == 1 && !(fraction >> (binaryPrecision - 1))) {
+ expo = 0; // subnormal
+ flags |= decimal::Underflow;
+ } else if (expo >= RealType::maxExponent) {
+ if (rounding == decimal::RoundToZero ||
+ (rounding == decimal::RoundDown && !isNegative) ||
+ (rounding == decimal::RoundUp && isNegative)) {
+ expo = RealType::maxExponent - 1; // +/-HUGE()
+ fraction = significandMask;
+ } else {
+ expo = RealType::maxExponent; // +/-Inf
+ fraction = 0;
+ flags |= decimal::Overflow;
+ }
+ } else {
+ fraction &= significandMask; // remove explicit normalization unless x87
+ }
+ return decimal::ConversionToBinaryResult<binaryPrecision>{
+ RealType{static_cast<RawType>(signBit |
+ static_cast<RawType>(expo) << RealType::significandBits | fraction)},
+ static_cast<decimal::ConversionResultFlags>(flags)};
+}
+
+template <int KIND>
+RT_API_ATTRS bool EditCommonRealInput(
+ IoStatementState &io, const DataEdit &edit, void *n) {
+ constexpr int binaryPrecision{common::PrecisionOfRealKind(KIND)};
+ if (TryFastPathRealDecimalInput<binaryPrecision>(io, edit, n)) {
+ return CheckCompleteListDirectedField(io, edit);
+ }
+ // Fast path wasn't available or didn't work; go the more general route
+ static constexpr int maxDigits{
+ common::MaxDecimalConversionDigits(binaryPrecision)};
+ static constexpr int bufferSize{maxDigits + 18};
+ char buffer[bufferSize];
+ auto scanned{ScanRealInput(buffer, maxDigits + 2, io, edit)};
+ int got{scanned.got};
+ if (got >= maxDigits + 2) {
+ io.GetIoErrorHandler().Crash("EditCommonRealInput: buffer was too small");
+ return false;
+ }
+ if (got == 0) {
+ const auto &connection{io.GetConnectionState()};
+ io.GetIoErrorHandler().SignalError(IostatBadRealInput,
+ "Bad real input data at column %d of record %d",
+ static_cast<int>(connection.positionInRecord + 1),
+ static_cast<int>(connection.currentRecordNumber));
+ return false;
+ }
+ decimal::ConversionToBinaryResult<binaryPrecision> converted;
+ const char *p{buffer};
+ if (scanned.isHexadecimal) {
+ buffer[got] = '\0';
+ converted = ConvertHexadecimal<binaryPrecision>(
+ p, edit.modes.round, scanned.exponent);
+ } else {
+ bool hadExtra{got > maxDigits};
+ int exponent{scanned.exponent};
+ if (exponent != 0) {
+ buffer[got++] = 'e';
+ if (exponent < 0) {
+ buffer[got++] = '-';
+ exponent = -exponent;
+ }
+ if (exponent > 9999) {
+ exponent = 9999; // will convert to +/-Inf
+ }
+ if (exponent > 999) {
+ int dig{exponent / 1000};
+ buffer[got++] = '0' + dig;
+ int rest{exponent - 1000 * dig};
+ dig = rest / 100;
+ buffer[got++] = '0' + dig;
+ rest -= 100 * dig;
+ dig = rest / 10;
+ buffer[got++] = '0' + dig;
+ buffer[got++] = '0' + (rest - 10 * dig);
+ } else if (exponent > 99) {
+ int dig{exponent / 100};
+ buffer[got++] = '0' + dig;
+ int rest{exponent - 100 * dig};
+ dig = rest / 10;
+ buffer[got++] = '0' + dig;
+ buffer[got++] = '0' + (rest - 10 * dig);
+ } else if (exponent > 9) {
+ int dig{exponent / 10};
+ buffer[got++] = '0' + dig;
+ buffer[got++] = '0' + (exponent - 10 * dig);
+ } else {
+ buffer[got++] = '0' + exponent;
+ }
+ }
+ buffer[got] = '\0';
+ converted = decimal::ConvertToBinary<binaryPrecision>(p, edit.modes.round);
+ if (hadExtra) {
+ converted.flags = static_cast<enum decimal::ConversionResultFlags>(
+ converted.flags | decimal::Inexact);
+ }
+ }
+ if (*p) { // unprocessed junk after value
+ const auto &connection{io.GetConnectionState()};
+ io.GetIoErrorHandler().SignalError(IostatBadRealInput,
+ "Trailing characters after real input data at column %d of record %d",
+ static_cast<int>(connection.positionInRecord + 1),
+ static_cast<int>(connection.currentRecordNumber));
+ return false;
+ }
+ *reinterpret_cast<decimal::BinaryFloatingPointNumber<binaryPrecision> *>(n) =
+ converted.binary;
+ // Set FP exception flags
+ if (converted.flags != decimal::ConversionResultFlags::Exact) {
+ if (converted.flags & decimal::ConversionResultFlags::Overflow) {
+ io.GetIoErrorHandler().SignalError(IostatRealInputOverflow);
+ return false;
+ }
+ RaiseFPExceptions(converted.flags);
+ }
+ return CheckCompleteListDirectedField(io, edit);
+}
+
+template <int KIND>
+RT_API_ATTRS bool EditRealInput(
+ IoStatementState &io, const DataEdit &edit, void *n) {
+ switch (edit.descriptor) {
+ case DataEdit::ListDirected:
+ if (IsNamelistNameOrSlash(io)) {
+ return false;
+ }
+ return EditCommonRealInput<KIND>(io, edit, n);
+ case DataEdit::ListDirectedRealPart:
+ case DataEdit::ListDirectedImaginaryPart:
+ case 'F':
+ case 'E': // incl. EN, ES, & EX
+ case 'D':
+ case 'G':
+ return EditCommonRealInput<KIND>(io, edit, n);
+ case 'B':
+ return EditBOZInput<1>(io, edit, n,
+ common::BitsForBinaryPrecision(common::PrecisionOfRealKind(KIND)) >> 3);
+ case 'O':
+ return EditBOZInput<3>(io, edit, n,
+ common::BitsForBinaryPrecision(common::PrecisionOfRealKind(KIND)) >> 3);
+ case 'Z':
+ return EditBOZInput<4>(io, edit, n,
+ common::BitsForBinaryPrecision(common::PrecisionOfRealKind(KIND)) >> 3);
+ case 'A': // legacy extension
+ return EditCharacterInput(io, edit, reinterpret_cast<char *>(n), KIND);
+ default:
+ io.GetIoErrorHandler().SignalError(IostatErrorInFormat,
+ "Data edit descriptor '%c' may not be used for REAL input",
+ edit.descriptor);
+ return false;
+ }
+}
+
+// 13.7.3 in Fortran 2018
+RT_API_ATTRS bool EditLogicalInput(
+ IoStatementState &io, const DataEdit &edit, bool &x) {
+ switch (edit.descriptor) {
+ case DataEdit::ListDirected:
+ if (IsNamelistNameOrSlash(io)) {
+ return false;
+ }
+ break;
+ case 'L':
+ case 'G':
+ break;
+ default:
+ io.GetIoErrorHandler().SignalError(IostatErrorInFormat,
+ "Data edit descriptor '%c' may not be used for LOGICAL input",
+ edit.descriptor);
+ return false;
+ }
+ Fortran::common::optional<int> remaining{io.CueUpInput(edit)};
+ Fortran::common::optional<char32_t> next{io.NextInField(remaining, edit)};
+ if (next && *next == '.') { // skip optional period
+ next = io.NextInField(remaining, edit);
+ }
+ if (!next) {
+ io.GetIoErrorHandler().SignalError("Empty LOGICAL input field");
+ return false;
+ }
+ switch (*next) {
+ case 'T':
+ case 't':
+ x = true;
+ break;
+ case 'F':
+ case 'f':
+ x = false;
+ break;
+ default:
+ io.GetIoErrorHandler().SignalError(
+ "Bad character '%lc' in LOGICAL input field", *next);
+ return false;
+ }
+ if (remaining) { // ignore the rest of a fixed-width field
+ io.HandleRelativePosition(*remaining);
+ } else if (edit.descriptor == DataEdit::ListDirected) {
+ while (io.NextInField(remaining, edit)) { // discard rest of field
+ }
+ }
+ return CheckCompleteListDirectedField(io, edit);
+}
+
+// See 13.10.3.1 paragraphs 7-9 in Fortran 2018
+template <typename CHAR>
+static RT_API_ATTRS bool EditDelimitedCharacterInput(
+ IoStatementState &io, CHAR *x, std::size_t length, char32_t delimiter) {
+ bool result{true};
+ while (true) {
+ std::size_t byteCount{0};
+ auto ch{io.GetCurrentChar(byteCount)};
+ if (!ch) {
+ if (io.AdvanceRecord()) {
+ continue;
+ } else {
+ result = false; // EOF in character value
+ break;
+ }
+ }
+ io.HandleRelativePosition(byteCount);
+ if (*ch == delimiter) {
+ auto next{io.GetCurrentChar(byteCount)};
+ if (next && *next == delimiter) {
+ // Repeated delimiter: use as character value
+ io.HandleRelativePosition(byteCount);
+ } else {
+ break; // closing delimiter
+ }
+ }
+ if (length > 0) {
+ *x++ = static_cast<CHAR>(*ch);
+ --length;
+ }
+ }
+ Fortran::runtime::fill_n(x, length, ' ');
+ return result;
+}
+
+template <typename CHAR>
+static RT_API_ATTRS bool EditListDirectedCharacterInput(
+ IoStatementState &io, CHAR *x, std::size_t length, const DataEdit &edit) {
+ std::size_t byteCount{0};
+ auto ch{io.GetCurrentChar(byteCount)};
+ if (ch && (*ch == '\'' || *ch == '"')) {
+ io.HandleRelativePosition(byteCount);
+ return EditDelimitedCharacterInput(io, x, length, *ch);
+ }
+ if (IsNamelistNameOrSlash(io) || io.GetConnectionState().IsAtEOF()) {
+ return false;
+ }
+ // Undelimited list-directed character input: stop at a value separator
+ // or the end of the current record.
+ while (auto ch{io.GetCurrentChar(byteCount)}) {
+ bool isSep{false};
+ switch (*ch) {
+ case ' ':
+ case '\t':
+ case '/':
+ isSep = true;
+ break;
+ case '&':
+ case '$':
+ isSep = edit.IsNamelist();
+ break;
+ case ',':
+ isSep = !(edit.modes.editingFlags & decimalComma);
+ break;
+ case ';':
+ isSep = !!(edit.modes.editingFlags & decimalComma);
+ break;
+ default:
+ break;
+ }
+ if (isSep) {
+ break;
+ }
+ if (length > 0) {
+ *x++ = static_cast<CHAR>(*ch);
+ --length;
+ } else if (edit.IsNamelist()) {
+ // GNU compatibility
+ break;
+ }
+ io.HandleRelativePosition(byteCount);
+ io.GotChar(byteCount);
+ }
+ Fortran::runtime::fill_n(x, length, ' ');
+ return true;
+}
+
+template <typename CHAR>
+RT_API_ATTRS bool EditCharacterInput(IoStatementState &io, const DataEdit &edit,
+ CHAR *x, std::size_t lengthChars) {
+ switch (edit.descriptor) {
+ case DataEdit::ListDirected:
+ return EditListDirectedCharacterInput(io, x, lengthChars, edit);
+ case 'A':
+ case 'G':
+ break;
+ case 'B':
+ return EditBOZInput<1>(io, edit, x, lengthChars * sizeof *x);
+ case 'O':
+ return EditBOZInput<3>(io, edit, x, lengthChars * sizeof *x);
+ case 'Z':
+ return EditBOZInput<4>(io, edit, x, lengthChars * sizeof *x);
+ default:
+ io.GetIoErrorHandler().SignalError(IostatErrorInFormat,
+ "Data edit descriptor '%c' may not be used with a CHARACTER data item",
+ edit.descriptor);
+ return false;
+ }
+ const ConnectionState &connection{io.GetConnectionState()};
+ std::size_t remainingChars{lengthChars};
+ // Skip leading characters.
+ // Their bytes don't count towards INQUIRE(IOLENGTH=).
+ std::size_t skipChars{0};
+ if (edit.width && *edit.width > 0) {
+ remainingChars = *edit.width;
+ if (remainingChars > lengthChars) {
+ skipChars = remainingChars - lengthChars;
+ }
+ }
+ // When the field is wider than the variable, we drop the leading
+ // characters. When the variable is wider than the field, there can be
+ // trailing padding or an EOR condition.
+ const char *input{nullptr};
+ std::size_t readyBytes{0};
+ // Transfer payload bytes; these do count.
+ while (remainingChars > 0) {
+ if (readyBytes == 0) {
+ readyBytes = io.GetNextInputBytes(input);
+ if (readyBytes == 0 ||
+ (readyBytes < remainingChars && edit.modes.nonAdvancing)) {
+ if (io.CheckForEndOfRecord(readyBytes, connection)) {
+ if (readyBytes == 0) {
+ // PAD='YES' and no more data
+ Fortran::runtime::fill_n(x, lengthChars, ' ');
+ return !io.GetIoErrorHandler().InError();
+ } else {
+ // Do partial read(s) then pad on last iteration
+ }
+ } else {
+ return !io.GetIoErrorHandler().InError();
+ }
+ }
+ }
+ std::size_t chunkBytes;
+ std::size_t chunkChars{1};
+ bool skipping{skipChars > 0};
+ if (connection.isUTF8) {
+ chunkBytes = MeasureUTF8Bytes(*input);
+ if (skipping) {
+ --skipChars;
+ } else if (auto ucs{DecodeUTF8(input)}) {
+ if ((sizeof *x == 1 && *ucs > 0xff) ||
+ (sizeof *x == 2 && *ucs > 0xffff)) {
+ *x++ = '?';
+ } else {
+ *x++ = static_cast<CHAR>(*ucs);
+ }
+ --lengthChars;
+ } else if (chunkBytes == 0) {
+ // error recovery: skip bad encoding
+ chunkBytes = 1;
+ }
+ } else if (connection.internalIoCharKind > 1) {
+ // Reading from non-default character internal unit
+ chunkBytes = connection.internalIoCharKind;
+ if (skipping) {
+ --skipChars;
+ } else {
+ char32_t buffer{0};
+ std::memcpy(&buffer, input, chunkBytes);
+ if ((sizeof *x == 1 && buffer > 0xff) ||
+ (sizeof *x == 2 && buffer > 0xffff)) {
+ *x++ = '?';
+ } else {
+ *x++ = static_cast<CHAR>(buffer);
+ }
+ --lengthChars;
+ }
+ } else if constexpr (sizeof *x > 1) {
+ // Read single byte with expansion into multi-byte CHARACTER
+ chunkBytes = 1;
+ if (skipping) {
+ --skipChars;
+ } else {
+ *x++ = static_cast<unsigned char>(*input);
+ --lengthChars;
+ }
+ } else { // single bytes -> default CHARACTER
+ if (skipping) {
+ chunkBytes = std::min<std::size_t>(skipChars, readyBytes);
+ chunkChars = chunkBytes;
+ skipChars -= chunkChars;
+ } else {
+ chunkBytes = std::min<std::size_t>(remainingChars, readyBytes);
+ chunkBytes = std::min<std::size_t>(lengthChars, chunkBytes);
+ chunkChars = chunkBytes;
+ std::memcpy(x, input, chunkBytes);
+ x += chunkBytes;
+ lengthChars -= chunkChars;
+ }
+ }
+ input += chunkBytes;
+ remainingChars -= chunkChars;
+ if (!skipping) {
+ io.GotChar(chunkBytes);
+ }
+ io.HandleRelativePosition(chunkBytes);
+ readyBytes -= chunkBytes;
+ }
+ // Pad the remainder of the input variable, if any.
+ Fortran::runtime::fill_n(x, lengthChars, ' ');
+ return CheckCompleteListDirectedField(io, edit);
+}
+
+template RT_API_ATTRS bool EditRealInput<2>(
+ IoStatementState &, const DataEdit &, void *);
+template RT_API_ATTRS bool EditRealInput<3>(
+ IoStatementState &, const DataEdit &, void *);
+template RT_API_ATTRS bool EditRealInput<4>(
+ IoStatementState &, const DataEdit &, void *);
+template RT_API_ATTRS bool EditRealInput<8>(
+ IoStatementState &, const DataEdit &, void *);
+template RT_API_ATTRS bool EditRealInput<10>(
+ IoStatementState &, const DataEdit &, void *);
+// TODO: double/double
+template RT_API_ATTRS bool EditRealInput<16>(
+ IoStatementState &, const DataEdit &, void *);
+
+template RT_API_ATTRS bool EditCharacterInput(
+ IoStatementState &, const DataEdit &, char *, std::size_t);
+template RT_API_ATTRS bool EditCharacterInput(
+ IoStatementState &, const DataEdit &, char16_t *, std::size_t);
+template RT_API_ATTRS bool EditCharacterInput(
+ IoStatementState &, const DataEdit &, char32_t *, std::size_t);
+
+RT_OFFLOAD_API_GROUP_END
+} // namespace Fortran::runtime::io
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/edit-input.h b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/edit-input.h
new file mode 100644
index 00000000000..961f06569ac
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/edit-input.h
@@ -0,0 +1,57 @@
+//===-- lib/runtime/edit-input.h --------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FLANG_RT_RUNTIME_EDIT_INPUT_H_
+#define FLANG_RT_RUNTIME_EDIT_INPUT_H_
+
+#include "flang-rt/runtime/format.h"
+#include "flang-rt/runtime/io-stmt.h"
+#include "flang/Decimal/decimal.h"
+
+namespace Fortran::runtime::io {
+
+RT_OFFLOAD_API_GROUP_BEGIN
+
+RT_API_ATTRS bool EditIntegerInput(
+ IoStatementState &, const DataEdit &, void *, int kind, bool isSigned);
+
+template <int KIND>
+RT_API_ATTRS bool EditRealInput(IoStatementState &, const DataEdit &, void *);
+
+RT_API_ATTRS bool EditLogicalInput(
+ IoStatementState &, const DataEdit &, bool &);
+
+template <typename CHAR>
+RT_API_ATTRS bool EditCharacterInput(
+ IoStatementState &, const DataEdit &, CHAR *, std::size_t);
+
+extern template RT_API_ATTRS bool EditRealInput<2>(
+ IoStatementState &, const DataEdit &, void *);
+extern template RT_API_ATTRS bool EditRealInput<3>(
+ IoStatementState &, const DataEdit &, void *);
+extern template RT_API_ATTRS bool EditRealInput<4>(
+ IoStatementState &, const DataEdit &, void *);
+extern template RT_API_ATTRS bool EditRealInput<8>(
+ IoStatementState &, const DataEdit &, void *);
+extern template RT_API_ATTRS bool EditRealInput<10>(
+ IoStatementState &, const DataEdit &, void *);
+// TODO: double/double
+extern template RT_API_ATTRS bool EditRealInput<16>(
+ IoStatementState &, const DataEdit &, void *);
+
+extern template RT_API_ATTRS bool EditCharacterInput(
+ IoStatementState &, const DataEdit &, char *, std::size_t);
+extern template RT_API_ATTRS bool EditCharacterInput(
+ IoStatementState &, const DataEdit &, char16_t *, std::size_t);
+extern template RT_API_ATTRS bool EditCharacterInput(
+ IoStatementState &, const DataEdit &, char32_t *, std::size_t);
+
+RT_OFFLOAD_API_GROUP_END
+
+} // namespace Fortran::runtime::io
+#endif // FLANG_RT_RUNTIME_EDIT_INPUT_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/edit-output.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/edit-output.cpp
new file mode 100644
index 00000000000..f90b6fb1096
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/edit-output.cpp
@@ -0,0 +1,978 @@
+//===-- lib/runtime/edit-output.cpp -----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "edit-output.h"
+#include "flang-rt/runtime/emit-encoded.h"
+#include "flang-rt/runtime/utf.h"
+#include "flang/Common/real.h"
+#include "flang/Common/uint128.h"
+#include <algorithm>
+
+namespace Fortran::runtime::io {
+RT_OFFLOAD_API_GROUP_BEGIN
+
+// In output statement, add a space between numbers and characters.
+static RT_API_ATTRS void AddSpaceBeforeCharacter(IoStatementState &io) {
+ if (auto *list{io.get_if<ListDirectedStatementState<Direction::Output>>()}) {
+ list->set_lastWasUndelimitedCharacter(false);
+ }
+}
+
+// B/O/Z output of arbitrarily sized data emits a binary/octal/hexadecimal
+// representation of what is interpreted to be a single unsigned integer value.
+// When used with character data, endianness is exposed.
+template <int LOG2_BASE>
+static RT_API_ATTRS bool EditBOZOutput(IoStatementState &io,
+ const DataEdit &edit, const unsigned char *data0, std::size_t bytes) {
+ AddSpaceBeforeCharacter(io);
+ int digits{static_cast<int>((bytes * 8) / LOG2_BASE)};
+ int get{static_cast<int>(bytes * 8) - digits * LOG2_BASE};
+ if (get > 0) {
+ ++digits;
+ } else {
+ get = LOG2_BASE;
+ }
+ int shift{7};
+ int increment{isHostLittleEndian ? -1 : 1};
+ const unsigned char *data{data0 + (isHostLittleEndian ? bytes - 1 : 0)};
+ int skippedZeroes{0};
+ int digit{0};
+ // The same algorithm is used to generate digits for real (below)
+ // as well as for generating them only to skip leading zeroes (here).
+ // Bits are copied one at a time from the source data.
+ // TODO: Multiple bit copies for hexadecimal, where misalignment
+ // is not possible; or for octal when all 3 bits come from the
+ // same byte.
+ while (bytes > 0) {
+ if (get == 0) {
+ if (digit != 0) {
+ break; // first nonzero leading digit
+ }
+ ++skippedZeroes;
+ get = LOG2_BASE;
+ } else if (shift < 0) {
+ data += increment;
+ --bytes;
+ shift = 7;
+ } else {
+ digit = 2 * digit + ((*data >> shift--) & 1);
+ --get;
+ }
+ }
+ // Emit leading spaces and zeroes; detect field overflow
+ int leadingZeroes{0};
+ int editWidth{edit.width.value_or(0)};
+ int significant{digits - skippedZeroes};
+ if (edit.digits && significant <= *edit.digits) { // Bw.m, Ow.m, Zw.m
+ if (*edit.digits == 0 && bytes == 0) {
+ editWidth = std::max(1, editWidth);
+ } else {
+ leadingZeroes = *edit.digits - significant;
+ }
+ } else if (bytes == 0) {
+ leadingZeroes = 1;
+ }
+ int subTotal{leadingZeroes + significant};
+ int leadingSpaces{std::max(0, editWidth - subTotal)};
+ if (editWidth > 0 && leadingSpaces + subTotal > editWidth) {
+ return EmitRepeated(io, '*', editWidth);
+ }
+ if (!(EmitRepeated(io, ' ', leadingSpaces) &&
+ EmitRepeated(io, '0', leadingZeroes))) {
+ return false;
+ }
+ // Emit remaining digits
+ while (bytes > 0) {
+ if (get == 0) {
+ char ch{static_cast<char>(digit >= 10 ? 'A' + digit - 10 : '0' + digit)};
+ if (!EmitAscii(io, &ch, 1)) {
+ return false;
+ }
+ get = LOG2_BASE;
+ digit = 0;
+ } else if (shift < 0) {
+ data += increment;
+ --bytes;
+ shift = 7;
+ } else {
+ digit = 2 * digit + ((*data >> shift--) & 1);
+ --get;
+ }
+ }
+ return true;
+}
+
+template <int KIND>
+bool RT_API_ATTRS EditIntegerOutput(IoStatementState &io, const DataEdit &edit,
+ common::HostSignedIntType<8 * KIND> n, bool isSigned) {
+ AddSpaceBeforeCharacter(io);
+ switch (edit.descriptor) {
+ case DataEdit::ListDirected:
+ case 'G':
+ case 'I':
+ break;
+ case 'B':
+ return EditBOZOutput<1>(
+ io, edit, reinterpret_cast<const unsigned char *>(&n), KIND);
+ case 'O':
+ return EditBOZOutput<3>(
+ io, edit, reinterpret_cast<const unsigned char *>(&n), KIND);
+ case 'Z':
+ return EditBOZOutput<4>(
+ io, edit, reinterpret_cast<const unsigned char *>(&n), KIND);
+ case 'L':
+ return EditLogicalOutput(io, edit, n != 0 ? true : false);
+ case 'A': // legacy extension
+ return EditCharacterOutput(
+ io, edit, reinterpret_cast<char *>(&n), sizeof n);
+ default:
+ io.GetIoErrorHandler().SignalError(IostatErrorInFormat,
+ "Data edit descriptor '%c' may not be used with an INTEGER data item",
+ edit.descriptor);
+ return false;
+ }
+ char buffer[130], *end{&buffer[sizeof buffer]}, *p{end};
+ bool isNegative{isSigned && n < 0};
+ using Unsigned = common::HostUnsignedIntType<8 * KIND>;
+ Unsigned un{static_cast<Unsigned>(n)};
+ int signChars{0};
+ if (isNegative) {
+ un = -un;
+ }
+ if (isNegative || (edit.modes.editingFlags & signPlus)) {
+ signChars = 1; // '-' or '+'
+ }
+ while (un > 0) {
+ auto quotient{un / 10u};
+ *--p = '0' + static_cast<int>(un - Unsigned{10} * quotient);
+ un = quotient;
+ }
+ int digits = end - p;
+ int leadingZeroes{0};
+ int editWidth{edit.width.value_or(0)};
+ if (edit.descriptor == 'I' && edit.digits && digits <= *edit.digits) {
+ // Only Iw.m can produce leading zeroes, not Gw.d (F'202X 13.7.5.2.2)
+ if (*edit.digits == 0 && n == 0) {
+ // Iw.0 with zero value: output field must be blank. For I0.0
+ // and a zero value, emit one blank character.
+ signChars = 0; // in case of SP
+ editWidth = std::max(1, editWidth);
+ } else {
+ leadingZeroes = *edit.digits - digits;
+ }
+ } else if (n == 0) {
+ leadingZeroes = 1;
+ }
+ int subTotal{signChars + leadingZeroes + digits};
+ int leadingSpaces{std::max(0, editWidth - subTotal)};
+ if (editWidth > 0 && leadingSpaces + subTotal > editWidth) {
+ return EmitRepeated(io, '*', editWidth);
+ }
+ if (edit.IsListDirected()) {
+ int total{std::max(leadingSpaces, 1) + subTotal};
+ if (io.GetConnectionState().NeedAdvance(static_cast<std::size_t>(total)) &&
+ !io.AdvanceRecord()) {
+ return false;
+ }
+ leadingSpaces = 1;
+ } else if (!edit.width) {
+ // Bare 'I' and 'G' are interpreted with various default widths in the
+ // compilers that support them, so there's always some leading space
+ // after column 1.
+ if (io.GetConnectionState().positionInRecord > 0) {
+ leadingSpaces = 1;
+ }
+ }
+ return EmitRepeated(io, ' ', leadingSpaces) &&
+ EmitAscii(io, n < 0 ? "-" : "+", signChars) &&
+ EmitRepeated(io, '0', leadingZeroes) && EmitAscii(io, p, digits);
+}
+
+// Formats the exponent (see table 13.1 for all the cases)
+RT_API_ATTRS const char *RealOutputEditingBase::FormatExponent(
+ int expo, const DataEdit &edit, int &length) {
+ char *eEnd{&exponent_[sizeof exponent_]};
+ char *exponent{eEnd};
+ for (unsigned e{static_cast<unsigned>(std::abs(expo))}; e > 0;) {
+ unsigned quotient{e / 10u};
+ *--exponent = '0' + e - 10 * quotient;
+ e = quotient;
+ }
+ bool overflow{false};
+ if (edit.expoDigits) {
+ if (int ed{*edit.expoDigits}) { // Ew.dEe with e > 0
+ overflow = exponent + ed < eEnd;
+ while (exponent > exponent_ + 2 /*E+*/ && exponent + ed > eEnd) {
+ *--exponent = '0';
+ }
+ } else if (exponent == eEnd) {
+ *--exponent = '0'; // Ew.dE0 with zero-valued exponent
+ }
+ } else if (edit.variation == 'X') {
+ if (expo == 0) {
+ *--exponent = '0'; // EX without Ee and zero-valued exponent
+ }
+ } else {
+ // Ensure at least two exponent digits unless EX
+ while (exponent + 2 > eEnd) {
+ *--exponent = '0';
+ }
+ }
+ *--exponent = expo < 0 ? '-' : '+';
+ if (edit.variation == 'X') {
+ *--exponent = 'P';
+ } else if (edit.expoDigits || edit.IsListDirected() || exponent + 3 == eEnd) {
+ *--exponent = edit.descriptor == 'D' ? 'D' : 'E'; // not 'G' or 'Q'
+ }
+ length = eEnd - exponent;
+ return overflow ? nullptr : exponent;
+}
+
+RT_API_ATTRS bool RealOutputEditingBase::EmitPrefix(
+ const DataEdit &edit, std::size_t length, std::size_t width) {
+ if (edit.IsListDirected()) {
+ int prefixLength{edit.descriptor == DataEdit::ListDirectedRealPart ? 2
+ : edit.descriptor == DataEdit::ListDirectedImaginaryPart ? 0
+ : 1};
+ int suffixLength{edit.descriptor == DataEdit::ListDirectedRealPart ||
+ edit.descriptor == DataEdit::ListDirectedImaginaryPart
+ ? 1
+ : 0};
+ length += prefixLength + suffixLength;
+ ConnectionState &connection{io_.GetConnectionState()};
+ return (!connection.NeedAdvance(length) || io_.AdvanceRecord()) &&
+ EmitAscii(io_, " (", prefixLength);
+ } else if (width > length) {
+ return EmitRepeated(io_, ' ', width - length);
+ } else {
+ return true;
+ }
+}
+
+RT_API_ATTRS bool RealOutputEditingBase::EmitSuffix(const DataEdit &edit) {
+ if (edit.descriptor == DataEdit::ListDirectedRealPart) {
+ return EmitAscii(
+ io_, edit.modes.editingFlags & decimalComma ? ";" : ",", 1);
+ } else if (edit.descriptor == DataEdit::ListDirectedImaginaryPart) {
+ return EmitAscii(io_, ")", 1);
+ } else {
+ return true;
+ }
+}
+
+template <int KIND>
+RT_API_ATTRS decimal::ConversionToDecimalResult
+RealOutputEditing<KIND>::ConvertToDecimal(
+ int significantDigits, enum decimal::FortranRounding rounding, int flags) {
+ auto converted{decimal::ConvertToDecimal<binaryPrecision>(buffer_,
+ sizeof buffer_, static_cast<enum decimal::DecimalConversionFlags>(flags),
+ significantDigits, rounding, x_)};
+ if (!converted.str) { // overflow
+ io_.GetIoErrorHandler().Crash(
+ "RealOutputEditing::ConvertToDecimal: buffer size %zd was insufficient",
+ sizeof buffer_);
+ }
+ return converted;
+}
+
+static RT_API_ATTRS bool IsInfOrNaN(const char *p, int length) {
+ if (!p || length < 1) {
+ return false;
+ }
+ if (*p == '-' || *p == '+') {
+ if (length == 1) {
+ return false;
+ }
+ ++p;
+ }
+ return *p == 'I' || *p == 'N';
+}
+
+// 13.7.2.3.3 in F'2018
+template <int KIND>
+RT_API_ATTRS bool RealOutputEditing<KIND>::EditEorDOutput(
+ const DataEdit &edit) {
+ AddSpaceBeforeCharacter(io_);
+ int editDigits{edit.digits.value_or(0)}; // 'd' field
+ int editWidth{edit.width.value_or(0)}; // 'w' field
+ int significantDigits{editDigits};
+ int flags{0};
+ if (edit.modes.editingFlags & signPlus) {
+ flags |= decimal::AlwaysSign;
+ }
+ int scale{edit.modes.scale}; // 'kP' value
+ bool isEN{edit.variation == 'N'};
+ bool isES{edit.variation == 'S'};
+ if (editWidth == 0) { // "the processor selects the field width"
+ if (edit.digits.has_value()) { // E0.d
+ if (editDigits == 0 && scale <= 0) { // E0.0
+ significantDigits = isEN || isES ? 0 : 1;
+ }
+ } else { // E0
+ flags |= decimal::Minimize;
+ significantDigits =
+ sizeof buffer_ - 5; // sign, NUL, + 3 extra for EN scaling
+ }
+ }
+ int zeroesAfterPoint{0};
+ if (isEN) {
+ scale = IsZero() ? 1 : 3;
+ significantDigits += scale;
+ } else if (isES) {
+ scale = 1;
+ ++significantDigits;
+ } else if (scale < 0) {
+ if (scale <= -editDigits) {
+ io_.GetIoErrorHandler().SignalError(IostatBadScaleFactor,
+ "Scale factor (kP) %d cannot be less than -d (%d)", scale,
+ -editDigits);
+ return false;
+ }
+ zeroesAfterPoint = -scale;
+ significantDigits = std::max(0, significantDigits - zeroesAfterPoint);
+ } else if (scale > 0) {
+ if (scale >= editDigits + 2) {
+ io_.GetIoErrorHandler().SignalError(IostatBadScaleFactor,
+ "Scale factor (kP) %d cannot be greater than d+2 (%d)", scale,
+ editDigits + 2);
+ return false;
+ }
+ ++significantDigits;
+ scale = std::min(scale, significantDigits + 1);
+ } else if (edit.digits.value_or(1) == 0 && !edit.variation) {
+ // F'2023 13.7.2.3.3 p5; does not apply to Gw.0(Ee) or E0(no d)
+ io_.GetIoErrorHandler().SignalError(IostatErrorInFormat,
+ "Output edit descriptor %cw.d must have d>0", edit.descriptor);
+ return false;
+ }
+ // In EN editing, multiple attempts may be necessary, so this is a loop.
+ while (true) {
+ decimal::ConversionToDecimalResult converted{
+ ConvertToDecimal(significantDigits, edit.modes.round, flags)};
+ if (IsInfOrNaN(converted.str, static_cast<int>(converted.length))) {
+ return editWidth > 0 &&
+ converted.length + trailingBlanks_ >
+ static_cast<std::size_t>(editWidth)
+ ? EmitRepeated(io_, '*', editWidth)
+ : EmitPrefix(edit, converted.length, editWidth) &&
+ EmitAscii(io_, converted.str, converted.length) &&
+ EmitRepeated(io_, ' ', trailingBlanks_) && EmitSuffix(edit);
+ }
+ if (!IsZero()) {
+ converted.decimalExponent -= scale;
+ }
+ if (isEN) {
+ // EN mode: we need an effective exponent field that is
+ // a multiple of three.
+ if (int modulus{converted.decimalExponent % 3}; modulus != 0) {
+ if (significantDigits > 1) {
+ --significantDigits;
+ --scale;
+ continue;
+ }
+ // Rounded nines up to a 1.
+ scale += modulus;
+ converted.decimalExponent -= modulus;
+ }
+ if (scale > 3) {
+ int adjust{3 * (scale / 3)};
+ scale -= adjust;
+ converted.decimalExponent += adjust;
+ } else if (scale < 1) {
+ int adjust{3 - 3 * (scale / 3)};
+ scale += adjust;
+ converted.decimalExponent -= adjust;
+ }
+ significantDigits = editDigits + scale;
+ }
+ // Format the exponent (see table 13.1 for all the cases)
+ int expoLength{0};
+ const char *exponent{
+ FormatExponent(converted.decimalExponent, edit, expoLength)};
+ int signLength{*converted.str == '-' || *converted.str == '+' ? 1 : 0};
+ int convertedDigits{static_cast<int>(converted.length) - signLength};
+ int zeroesBeforePoint{std::max(0, scale - convertedDigits)};
+ int digitsBeforePoint{std::max(0, scale - zeroesBeforePoint)};
+ int digitsAfterPoint{convertedDigits - digitsBeforePoint};
+ int trailingZeroes{flags & decimal::Minimize
+ ? 0
+ : std::max(0,
+ significantDigits - (convertedDigits + zeroesBeforePoint))};
+ int totalLength{signLength + digitsBeforePoint + zeroesBeforePoint +
+ 1 /*'.'*/ + zeroesAfterPoint + digitsAfterPoint + trailingZeroes +
+ expoLength};
+ int width{editWidth > 0 ? editWidth : totalLength};
+ if (totalLength > width || !exponent) {
+ return EmitRepeated(io_, '*', width);
+ }
+ if (totalLength < width && digitsBeforePoint == 0 &&
+ zeroesBeforePoint == 0) {
+ zeroesBeforePoint = 1;
+ ++totalLength;
+ }
+ if (totalLength < width && editWidth == 0) {
+ width = totalLength;
+ }
+ return EmitPrefix(edit, totalLength, width) &&
+ EmitAscii(io_, converted.str, signLength + digitsBeforePoint) &&
+ EmitRepeated(io_, '0', zeroesBeforePoint) &&
+ EmitAscii(io_, edit.modes.editingFlags & decimalComma ? "," : ".", 1) &&
+ EmitRepeated(io_, '0', zeroesAfterPoint) &&
+ EmitAscii(io_, converted.str + signLength + digitsBeforePoint,
+ digitsAfterPoint) &&
+ EmitRepeated(io_, '0', trailingZeroes) &&
+ EmitAscii(io_, exponent, expoLength) && EmitSuffix(edit);
+ }
+}
+
+// 13.7.2.3.2 in F'2018
+template <int KIND>
+RT_API_ATTRS bool RealOutputEditing<KIND>::EditFOutput(const DataEdit &edit) {
+ AddSpaceBeforeCharacter(io_);
+ int fracDigits{edit.digits.value_or(0)}; // 'd' field
+ const int editWidth{edit.width.value_or(0)}; // 'w' field
+ enum decimal::FortranRounding rounding{edit.modes.round};
+ int flags{0};
+ if (edit.modes.editingFlags & signPlus) {
+ flags |= decimal::AlwaysSign;
+ }
+ if (editWidth == 0) { // "the processor selects the field width"
+ if (!edit.digits.has_value()) { // F0
+ flags |= decimal::Minimize;
+ fracDigits = sizeof buffer_ - 2; // sign & NUL
+ }
+ }
+ bool emitTrailingZeroes{!(flags & decimal::Minimize)};
+ // Multiple conversions may be needed to get the right number of
+ // effective rounded fractional digits.
+ bool canIncrease{true};
+ for (int extraDigits{fracDigits == 0 ? 1 : 0};;) {
+ decimal::ConversionToDecimalResult converted{
+ ConvertToDecimal(extraDigits + fracDigits, rounding, flags)};
+ const char *convertedStr{converted.str};
+ if (IsInfOrNaN(convertedStr, static_cast<int>(converted.length))) {
+ return editWidth > 0 &&
+ converted.length > static_cast<std::size_t>(editWidth)
+ ? EmitRepeated(io_, '*', editWidth)
+ : EmitPrefix(edit, converted.length, editWidth) &&
+ EmitAscii(io_, convertedStr, converted.length) &&
+ EmitSuffix(edit);
+ }
+ int expo{converted.decimalExponent + edit.modes.scale /*kP*/};
+ int signLength{*convertedStr == '-' || *convertedStr == '+' ? 1 : 0};
+ int convertedDigits{static_cast<int>(converted.length) - signLength};
+ if (IsZero()) { // don't treat converted "0" as significant digit
+ expo = 0;
+ convertedDigits = 0;
+ }
+ bool isNegative{*convertedStr == '-'};
+ char one[2];
+ if (expo > extraDigits && extraDigits >= 0 && canIncrease) {
+ extraDigits = expo;
+ if (!edit.digits.has_value()) { // F0
+ fracDigits = sizeof buffer_ - extraDigits - 2; // sign & NUL
+ }
+ canIncrease = false; // only once
+ continue;
+ } else if (expo == -fracDigits && convertedDigits > 0) {
+ // Result will be either a signed zero or power of ten, depending
+ // on rounding.
+ char leading{convertedStr[signLength]};
+ bool roundToPowerOfTen{false};
+ switch (edit.modes.round) {
+ case decimal::FortranRounding::RoundUp:
+ roundToPowerOfTen = !isNegative;
+ break;
+ case decimal::FortranRounding::RoundDown:
+ roundToPowerOfTen = isNegative;
+ break;
+ case decimal::FortranRounding::RoundToZero:
+ break;
+ case decimal::FortranRounding::RoundNearest:
+ if (leading == '5' &&
+ rounding == decimal::FortranRounding::RoundNearest) {
+ // Try again, rounding away from zero.
+ rounding = isNegative ? decimal::FortranRounding::RoundDown
+ : decimal::FortranRounding::RoundUp;
+ extraDigits = 1 - fracDigits; // just one digit needed
+ continue;
+ }
+ roundToPowerOfTen = leading > '5';
+ break;
+ case decimal::FortranRounding::RoundCompatible:
+ roundToPowerOfTen = leading >= '5';
+ break;
+ }
+ if (roundToPowerOfTen) {
+ ++expo;
+ convertedDigits = 1;
+ if (signLength > 0) {
+ one[0] = *convertedStr;
+ one[1] = '1';
+ } else {
+ one[0] = '1';
+ }
+ convertedStr = one;
+ } else {
+ expo = 0;
+ convertedDigits = 0;
+ }
+ } else if (expo < extraDigits && extraDigits > -fracDigits) {
+ extraDigits = std::max(expo, -fracDigits);
+ continue;
+ }
+ int digitsBeforePoint{std::max(0, std::min(expo, convertedDigits))};
+ int zeroesBeforePoint{std::max(0, expo - digitsBeforePoint)};
+ if (zeroesBeforePoint > 0 && (flags & decimal::Minimize)) {
+ // If a minimized result looks like an integer, emit all of
+ // its digits rather than clipping some to zeroes.
+ // This can happen with HUGE(0._2) == 65504._2.
+ flags &= ~decimal::Minimize;
+ continue;
+ }
+ int zeroesAfterPoint{std::min(fracDigits, std::max(0, -expo))};
+ int digitsAfterPoint{convertedDigits - digitsBeforePoint};
+ int trailingZeroes{emitTrailingZeroes
+ ? std::max(0, fracDigits - (zeroesAfterPoint + digitsAfterPoint))
+ : 0};
+ if (digitsBeforePoint + zeroesBeforePoint + zeroesAfterPoint +
+ digitsAfterPoint + trailingZeroes ==
+ 0) {
+ zeroesBeforePoint = 1; // "." -> "0."
+ }
+ int totalLength{signLength + digitsBeforePoint + zeroesBeforePoint +
+ 1 /*'.'*/ + zeroesAfterPoint + digitsAfterPoint + trailingZeroes +
+ trailingBlanks_ /* G editing converted to F */};
+ int width{editWidth > 0 || trailingBlanks_ ? editWidth : totalLength};
+ if (totalLength > width) {
+ return EmitRepeated(io_, '*', width);
+ }
+ if (totalLength < width && digitsBeforePoint + zeroesBeforePoint == 0) {
+ zeroesBeforePoint = 1;
+ ++totalLength;
+ }
+ return EmitPrefix(edit, totalLength, width) &&
+ EmitAscii(io_, convertedStr, signLength + digitsBeforePoint) &&
+ EmitRepeated(io_, '0', zeroesBeforePoint) &&
+ EmitAscii(io_, edit.modes.editingFlags & decimalComma ? "," : ".", 1) &&
+ EmitRepeated(io_, '0', zeroesAfterPoint) &&
+ EmitAscii(io_, convertedStr + signLength + digitsBeforePoint,
+ digitsAfterPoint) &&
+ EmitRepeated(io_, '0', trailingZeroes) &&
+ EmitRepeated(io_, ' ', trailingBlanks_) && EmitSuffix(edit);
+ }
+}
+
+// 13.7.5.2.3 in F'2018
+template <int KIND>
+RT_API_ATTRS DataEdit RealOutputEditing<KIND>::EditForGOutput(DataEdit edit) {
+ edit.descriptor = 'E';
+ edit.variation = 'G'; // to suppress error for Ew.0
+ int editWidth{edit.width.value_or(0)};
+ int significantDigits{edit.digits.value_or(
+ static_cast<int>(BinaryFloatingPoint::decimalPrecision))}; // 'd'
+ if (editWidth > 0 && significantDigits == 0) {
+ return edit; // Gw.0Ee -> Ew.0Ee for w > 0
+ }
+ int flags{0};
+ if (edit.modes.editingFlags & signPlus) {
+ flags |= decimal::AlwaysSign;
+ }
+ decimal::ConversionToDecimalResult converted{
+ ConvertToDecimal(significantDigits, edit.modes.round, flags)};
+ if (IsInfOrNaN(converted.str, static_cast<int>(converted.length))) {
+ return edit; // Inf/Nan -> Ew.d (same as Fw.d)
+ }
+ int expo{IsZero() ? 1 : converted.decimalExponent}; // 's'
+ if (expo < 0 || expo > significantDigits) {
+ if (editWidth == 0 && !edit.expoDigits) { // G0.d -> G0.dE0
+ edit.expoDigits = 0;
+ }
+ return edit; // Ew.dEe
+ }
+ edit.descriptor = 'F';
+ edit.modes.scale = 0; // kP is ignored for G when no exponent field
+ trailingBlanks_ = 0;
+ if (editWidth > 0) {
+ int expoDigits{edit.expoDigits.value_or(0)};
+ // F'2023 13.7.5.2.3 p5: "If 0 <= s <= d, the scale factor has no effect
+ // and F(w − n).(d − s),n(’b’) editing is used where b is a blank and
+ // n is 4 for Gw.d editing, e + 2 for Gw.dEe editing if e > 0, and
+ // 4 for Gw.dE0 editing."
+ trailingBlanks_ = expoDigits > 0 ? expoDigits + 2 : 4; // 'n'
+ }
+ if (edit.digits.has_value()) {
+ *edit.digits = std::max(0, *edit.digits - expo);
+ }
+ return edit;
+}
+
+// 13.10.4 in F'2018
+template <int KIND>
+RT_API_ATTRS bool RealOutputEditing<KIND>::EditListDirectedOutput(
+ const DataEdit &edit) {
+ decimal::ConversionToDecimalResult converted{
+ ConvertToDecimal(1, edit.modes.round)};
+ if (IsInfOrNaN(converted.str, static_cast<int>(converted.length))) {
+ DataEdit copy{edit};
+ copy.variation = DataEdit::ListDirected;
+ return EditEorDOutput(copy);
+ }
+ int expo{converted.decimalExponent};
+ // The decimal precision of 16-bit floating-point types is very low,
+ // so use a reasonable cap of 6 to allow more values to be emitted
+ // with Fw.d editing.
+ static constexpr int maxExpo{
+ std::max(6, BinaryFloatingPoint::decimalPrecision)};
+ if (expo < 0 || expo > maxExpo) {
+ DataEdit copy{edit};
+ copy.variation = DataEdit::ListDirected;
+ copy.modes.scale = 1; // 1P
+ return EditEorDOutput(copy);
+ } else {
+ return EditFOutput(edit);
+ }
+}
+
+// 13.7.2.3.6 in F'2023
+// The specification for hexadecimal output, unfortunately for implementors,
+// leaves as "implementation dependent" the choice of how to emit values
+// with multiple hexadecimal output possibilities that are numerically
+// equivalent. The one working implementation of EX output that I can find
+// apparently chooses to frame the nybbles from most to least significant,
+// rather than trying to minimize the magnitude of the binary exponent.
+// E.g., 2. is edited into 0X8.0P-2 rather than 0X2.0P0. This implementation
+// follows that precedent so as to avoid a gratuitous incompatibility.
+template <int KIND>
+RT_API_ATTRS auto RealOutputEditing<KIND>::ConvertToHexadecimal(
+ int significantDigits, enum decimal::FortranRounding rounding,
+ int flags) -> ConvertToHexadecimalResult {
+ if (x_.IsNaN() || x_.IsInfinite()) {
+ auto converted{ConvertToDecimal(significantDigits, rounding, flags)};
+ return {converted.str, static_cast<int>(converted.length), 0};
+ }
+ x_.RoundToBits(4 * significantDigits, rounding);
+ if (x_.IsInfinite()) { // rounded away to +/-Inf
+ auto converted{ConvertToDecimal(significantDigits, rounding, flags)};
+ return {converted.str, static_cast<int>(converted.length), 0};
+ }
+ int len{0};
+ if (x_.IsNegative()) {
+ buffer_[len++] = '-';
+ } else if (flags & decimal::AlwaysSign) {
+ buffer_[len++] = '+';
+ }
+ auto fraction{x_.Fraction()};
+ if (fraction == 0) {
+ buffer_[len++] = '0';
+ return {buffer_, len, 0};
+ } else {
+ // Ensure that the MSB is set.
+ int expo{x_.UnbiasedExponent() - 3};
+ while (!(fraction >> (x_.binaryPrecision - 1))) {
+ fraction <<= 1;
+ --expo;
+ }
+ // This is initially the right shift count needed to bring the
+ // most-significant hexadecimal digit's bits into the LSBs.
+ // x_.binaryPrecision is constant, so / can be used for readability.
+ int shift{x_.binaryPrecision - 4};
+ typename BinaryFloatingPoint::RawType one{1};
+ auto remaining{(one << x_.binaryPrecision) - one};
+ for (int digits{0}; digits < significantDigits; ++digits) {
+ if ((flags & decimal::Minimize) && !(fraction & remaining)) {
+ break;
+ }
+ int hexDigit{0};
+ if (shift >= 0) {
+ hexDigit = int(fraction >> shift) & 0xf;
+ } else if (shift >= -3) {
+ hexDigit = int(fraction << -shift) & 0xf;
+ }
+ if (hexDigit >= 10) {
+ buffer_[len++] = 'A' + hexDigit - 10;
+ } else {
+ buffer_[len++] = '0' + hexDigit;
+ }
+ shift -= 4;
+ remaining >>= 4;
+ }
+ return {buffer_, len, expo};
+ }
+}
+
+template <int KIND>
+RT_API_ATTRS bool RealOutputEditing<KIND>::EditEXOutput(const DataEdit &edit) {
+ AddSpaceBeforeCharacter(io_);
+ int editDigits{edit.digits.value_or(0)}; // 'd' field
+ int significantDigits{editDigits + 1};
+ int flags{0};
+ if (edit.modes.editingFlags & signPlus) {
+ flags |= decimal::AlwaysSign;
+ }
+ int editWidth{edit.width.value_or(0)}; // 'w' field
+ if ((editWidth == 0 && !edit.digits) || editDigits == 0) {
+ // EX0 or EXw.0
+ flags |= decimal::Minimize;
+ static constexpr int maxSigHexDigits{
+ (common::PrecisionOfRealKind(16) + 3) / 4};
+ significantDigits = maxSigHexDigits;
+ }
+ auto converted{
+ ConvertToHexadecimal(significantDigits, edit.modes.round, flags)};
+ if (IsInfOrNaN(converted.str, converted.length)) {
+ return editWidth > 0 && converted.length > editWidth
+ ? EmitRepeated(io_, '*', editWidth)
+ : (editWidth <= converted.length ||
+ EmitRepeated(io_, ' ', editWidth - converted.length)) &&
+ EmitAscii(io_, converted.str, converted.length);
+ }
+ int signLength{converted.length > 0 &&
+ (converted.str[0] == '-' || converted.str[0] == '+')
+ ? 1
+ : 0};
+ int convertedDigits{converted.length - signLength};
+ int expoLength{0};
+ const char *exponent{FormatExponent(converted.exponent, edit, expoLength)};
+ int trailingZeroes{flags & decimal::Minimize
+ ? 0
+ : std::max(0, significantDigits - convertedDigits)};
+ int totalLength{converted.length + trailingZeroes + expoLength + 3 /*0X.*/};
+ int width{editWidth > 0 ? editWidth : totalLength};
+ return totalLength > width || !exponent
+ ? EmitRepeated(io_, '*', width)
+ : EmitRepeated(io_, ' ', width - totalLength) &&
+ EmitAscii(io_, converted.str, signLength) &&
+ EmitAscii(io_, "0X", 2) &&
+ EmitAscii(io_, converted.str + signLength, 1) &&
+ EmitAscii(
+ io_, edit.modes.editingFlags & decimalComma ? "," : ".", 1) &&
+ EmitAscii(io_, converted.str + signLength + 1,
+ converted.length - (signLength + 1)) &&
+ EmitRepeated(io_, '0', trailingZeroes) &&
+ EmitAscii(io_, exponent, expoLength);
+}
+
+template <int KIND>
+RT_API_ATTRS bool RealOutputEditing<KIND>::Edit(const DataEdit &edit) {
+ const DataEdit *editPtr{&edit};
+ DataEdit newEdit;
+ if (editPtr->descriptor == 'G') {
+ // Avoid recursive call as in Edit(EditForGOutput(edit)).
+ newEdit = EditForGOutput(*editPtr);
+ editPtr = &newEdit;
+ RUNTIME_CHECK(io_.GetIoErrorHandler(), editPtr->descriptor != 'G');
+ }
+ switch (editPtr->descriptor) {
+ case 'D':
+ return EditEorDOutput(*editPtr);
+ case 'E':
+ if (editPtr->variation == 'X') {
+ return EditEXOutput(*editPtr);
+ } else {
+ return EditEorDOutput(*editPtr);
+ }
+ case 'F':
+ return EditFOutput(*editPtr);
+ case 'B':
+ return EditBOZOutput<1>(io_, *editPtr,
+ reinterpret_cast<const unsigned char *>(&x_),
+ common::BitsForBinaryPrecision(common::PrecisionOfRealKind(KIND)) >> 3);
+ case 'O':
+ return EditBOZOutput<3>(io_, *editPtr,
+ reinterpret_cast<const unsigned char *>(&x_),
+ common::BitsForBinaryPrecision(common::PrecisionOfRealKind(KIND)) >> 3);
+ case 'Z':
+ return EditBOZOutput<4>(io_, *editPtr,
+ reinterpret_cast<const unsigned char *>(&x_),
+ common::BitsForBinaryPrecision(common::PrecisionOfRealKind(KIND)) >> 3);
+ case 'L':
+ return EditLogicalOutput(
+ io_, *editPtr, *reinterpret_cast<const char *>(&x_));
+ case 'A': // legacy extension
+ return EditCharacterOutput(
+ io_, *editPtr, reinterpret_cast<char *>(&x_), sizeof x_);
+ default:
+ if (editPtr->IsListDirected()) {
+ return EditListDirectedOutput(*editPtr);
+ }
+ io_.GetIoErrorHandler().SignalError(IostatErrorInFormat,
+ "Data edit descriptor '%c' may not be used with a REAL data item",
+ editPtr->descriptor);
+ return false;
+ }
+ return false;
+}
+
+RT_API_ATTRS bool ListDirectedLogicalOutput(IoStatementState &io,
+ ListDirectedStatementState<Direction::Output> &list, bool truth) {
+ return list.EmitLeadingSpaceOrAdvance(io) &&
+ EmitAscii(io, truth ? "T" : "F", 1);
+}
+
+RT_API_ATTRS bool EditLogicalOutput(
+ IoStatementState &io, const DataEdit &edit, bool truth) {
+ switch (edit.descriptor) {
+ case 'L':
+ case 'G':
+ return EmitRepeated(io, ' ', std::max(0, edit.width.value_or(1) - 1)) &&
+ EmitAscii(io, truth ? "T" : "F", 1);
+ case 'B':
+ return EditBOZOutput<1>(io, edit,
+ reinterpret_cast<const unsigned char *>(&truth), sizeof truth);
+ case 'O':
+ return EditBOZOutput<3>(io, edit,
+ reinterpret_cast<const unsigned char *>(&truth), sizeof truth);
+ case 'Z':
+ return EditBOZOutput<4>(io, edit,
+ reinterpret_cast<const unsigned char *>(&truth), sizeof truth);
+ case 'A': { // legacy extension
+ int truthBits{truth};
+ int len{sizeof truthBits};
+ int width{edit.width.value_or(len)};
+ return EmitRepeated(io, ' ', std::max(0, width - len)) &&
+ EmitEncoded(
+ io, reinterpret_cast<char *>(&truthBits), std::min(width, len));
+ }
+ default:
+ io.GetIoErrorHandler().SignalError(IostatErrorInFormat,
+ "Data edit descriptor '%c' may not be used with a LOGICAL data item",
+ edit.descriptor);
+ return false;
+ }
+}
+
+template <typename CHAR>
+RT_API_ATTRS bool ListDirectedCharacterOutput(IoStatementState &io,
+ ListDirectedStatementState<Direction::Output> &list, const CHAR *x,
+ std::size_t length) {
+ bool ok{true};
+ MutableModes &modes{io.mutableModes()};
+ ConnectionState &connection{io.GetConnectionState()};
+ if (modes.delim) {
+ ok = ok && list.EmitLeadingSpaceOrAdvance(io);
+ // Value is delimited with ' or " marks, and interior
+ // instances of that character are doubled.
+ auto EmitOne{[&](CHAR ch) {
+ if (connection.NeedAdvance(1)) {
+ ok = ok && io.AdvanceRecord();
+ }
+ ok = ok && EmitEncoded(io, &ch, 1);
+ }};
+ EmitOne(modes.delim);
+ for (std::size_t j{0}; j < length; ++j) {
+ // Doubled delimiters must be put on the same record
+ // in order to be acceptable as list-directed or NAMELIST
+ // input; however, this requirement is not always possible
+ // when the records have a fixed length, as is the case with
+ // internal output. The standard is silent on what should
+ // happen, and no two extant Fortran implementations do
+ // the same thing when tested with this case.
+ // This runtime splits the doubled delimiters across
+ // two records for lack of a better alternative.
+ if (x[j] == static_cast<CHAR>(modes.delim)) {
+ EmitOne(x[j]);
+ }
+ EmitOne(x[j]);
+ }
+ EmitOne(modes.delim);
+ } else {
+ // Undelimited list-directed output
+ ok = ok && list.EmitLeadingSpaceOrAdvance(io, length > 0 ? 1 : 0, true);
+ std::size_t put{0};
+ std::size_t oneAtATime{
+ connection.useUTF8<CHAR>() || connection.internalIoCharKind > 1
+ ? 1
+ : length};
+ while (ok && put < length) {
+ if (std::size_t chunk{std::min<std::size_t>(
+ std::min<std::size_t>(length - put, oneAtATime),
+ connection.RemainingSpaceInRecord())}) {
+ ok = EmitEncoded(io, x + put, chunk);
+ put += chunk;
+ } else {
+ ok = io.AdvanceRecord() && EmitAscii(io, " ", 1);
+ }
+ }
+ list.set_lastWasUndelimitedCharacter(true);
+ }
+ return ok;
+}
+
+template <typename CHAR>
+RT_API_ATTRS bool EditCharacterOutput(IoStatementState &io,
+ const DataEdit &edit, const CHAR *x, std::size_t length) {
+ int len{static_cast<int>(length)};
+ int width{edit.width.value_or(len)};
+ switch (edit.descriptor) {
+ case 'A':
+ break;
+ case 'G':
+ if (width == 0) {
+ width = len;
+ }
+ break;
+ case 'B':
+ return EditBOZOutput<1>(io, edit,
+ reinterpret_cast<const unsigned char *>(x), sizeof(CHAR) * length);
+ case 'O':
+ return EditBOZOutput<3>(io, edit,
+ reinterpret_cast<const unsigned char *>(x), sizeof(CHAR) * length);
+ case 'Z':
+ return EditBOZOutput<4>(io, edit,
+ reinterpret_cast<const unsigned char *>(x), sizeof(CHAR) * length);
+ case 'L':
+ return EditLogicalOutput(io, edit, *reinterpret_cast<const char *>(x));
+ default:
+ io.GetIoErrorHandler().SignalError(IostatErrorInFormat,
+ "Data edit descriptor '%c' may not be used with a CHARACTER data item",
+ edit.descriptor);
+ return false;
+ }
+ return EmitRepeated(io, ' ', std::max(0, width - len)) &&
+ EmitEncoded(io, x, std::min(width, len));
+}
+
+template RT_API_ATTRS bool EditIntegerOutput<1>(
+ IoStatementState &, const DataEdit &, std::int8_t, bool);
+template RT_API_ATTRS bool EditIntegerOutput<2>(
+ IoStatementState &, const DataEdit &, std::int16_t, bool);
+template RT_API_ATTRS bool EditIntegerOutput<4>(
+ IoStatementState &, const DataEdit &, std::int32_t, bool);
+template RT_API_ATTRS bool EditIntegerOutput<8>(
+ IoStatementState &, const DataEdit &, std::int64_t, bool);
+template RT_API_ATTRS bool EditIntegerOutput<16>(
+ IoStatementState &, const DataEdit &, common::int128_t, bool);
+
+template class RealOutputEditing<2>;
+template class RealOutputEditing<3>;
+template class RealOutputEditing<4>;
+template class RealOutputEditing<8>;
+template class RealOutputEditing<10>;
+// TODO: double/double
+template class RealOutputEditing<16>;
+
+template RT_API_ATTRS bool ListDirectedCharacterOutput(IoStatementState &,
+ ListDirectedStatementState<Direction::Output> &, const char *,
+ std::size_t chars);
+template RT_API_ATTRS bool ListDirectedCharacterOutput(IoStatementState &,
+ ListDirectedStatementState<Direction::Output> &, const char16_t *,
+ std::size_t chars);
+template RT_API_ATTRS bool ListDirectedCharacterOutput(IoStatementState &,
+ ListDirectedStatementState<Direction::Output> &, const char32_t *,
+ std::size_t chars);
+
+template RT_API_ATTRS bool EditCharacterOutput(
+ IoStatementState &, const DataEdit &, const char *, std::size_t chars);
+template RT_API_ATTRS bool EditCharacterOutput(
+ IoStatementState &, const DataEdit &, const char16_t *, std::size_t chars);
+template RT_API_ATTRS bool EditCharacterOutput(
+ IoStatementState &, const DataEdit &, const char32_t *, std::size_t chars);
+
+RT_OFFLOAD_API_GROUP_END
+} // namespace Fortran::runtime::io
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/edit-output.h b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/edit-output.h
new file mode 100644
index 00000000000..dbeccb291d3
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/edit-output.h
@@ -0,0 +1,145 @@
+//===-- lib/runtime/edit-output.h -------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FLANG_RT_RUNTIME_EDIT_OUTPUT_H_
+#define FLANG_RT_RUNTIME_EDIT_OUTPUT_H_
+
+// Output data editing templates implementing the FORMAT data editing
+// descriptors E, EN, ES, EX, D, F, and G for REAL data (and COMPLEX
+// components, I and G for INTEGER, and B/O/Z for both.
+// See subclauses in 13.7.2.3 of Fortran 2018 for the
+// detailed specifications of these descriptors.
+// List-directed output (13.10.4) for numeric types is also done here.
+// Drives the same fast binary-to-decimal formatting templates used
+// in the f18 front-end.
+
+#include "flang-rt/runtime/format.h"
+#include "flang-rt/runtime/io-stmt.h"
+#include "flang/Common/uint128.h"
+#include "flang/Decimal/decimal.h"
+
+namespace Fortran::runtime::io {
+
+RT_OFFLOAD_API_GROUP_BEGIN
+
+// I, B, O, Z, and G output editing for INTEGER.
+// The DataEdit reference is const here (and elsewhere in this header) so that
+// one edit descriptor with a repeat factor may safely serve to edit
+// multiple elements of an array.
+template <int KIND>
+RT_API_ATTRS bool EditIntegerOutput(IoStatementState &, const DataEdit &,
+ common::HostSignedIntType<8 * KIND>, bool isSigned);
+
+// Encapsulates the state of a REAL output conversion.
+class RealOutputEditingBase {
+protected:
+ explicit RT_API_ATTRS RealOutputEditingBase(IoStatementState &io) : io_{io} {}
+
+ // Returns null when the exponent overflows a fixed-size output field.
+ RT_API_ATTRS const char *FormatExponent(
+ int, const DataEdit &edit, int &length);
+ RT_API_ATTRS bool EmitPrefix(
+ const DataEdit &, std::size_t length, std::size_t width);
+ RT_API_ATTRS bool EmitSuffix(const DataEdit &);
+
+ IoStatementState &io_;
+ int trailingBlanks_{0}; // created when Gw editing maps to Fw
+ char exponent_[16];
+};
+
+template <int KIND> class RealOutputEditing : public RealOutputEditingBase {
+public:
+ RT_VAR_GROUP_BEGIN
+ static constexpr int binaryPrecision{common::PrecisionOfRealKind(KIND)};
+ RT_VAR_GROUP_END
+ using BinaryFloatingPoint =
+ decimal::BinaryFloatingPointNumber<binaryPrecision>;
+ template <typename A>
+ RT_API_ATTRS RealOutputEditing(IoStatementState &io, A x)
+ : RealOutputEditingBase{io}, x_{x} {}
+ RT_API_ATTRS bool Edit(const DataEdit &);
+
+private:
+ // The DataEdit arguments here are const references or copies so that
+ // the original DataEdit can safely serve multiple array elements when
+ // it has a repeat count.
+ RT_API_ATTRS bool EditEorDOutput(const DataEdit &);
+ RT_API_ATTRS bool EditFOutput(const DataEdit &);
+ RT_API_ATTRS DataEdit EditForGOutput(DataEdit); // returns an E or F edit
+ RT_API_ATTRS bool EditEXOutput(const DataEdit &);
+ RT_API_ATTRS bool EditListDirectedOutput(const DataEdit &);
+
+ RT_API_ATTRS bool IsZero() const { return x_.IsZero(); }
+
+ RT_API_ATTRS decimal::ConversionToDecimalResult ConvertToDecimal(
+ int significantDigits, enum decimal::FortranRounding, int flags = 0);
+
+ struct ConvertToHexadecimalResult {
+ const char *str;
+ int length;
+ int exponent;
+ };
+ RT_API_ATTRS ConvertToHexadecimalResult ConvertToHexadecimal(
+ int significantDigits, enum decimal::FortranRounding, int flags = 0);
+
+ BinaryFloatingPoint x_;
+ char buffer_[BinaryFloatingPoint::maxDecimalConversionDigits +
+ EXTRA_DECIMAL_CONVERSION_SPACE];
+};
+
+RT_API_ATTRS bool ListDirectedLogicalOutput(
+ IoStatementState &, ListDirectedStatementState<Direction::Output> &, bool);
+RT_API_ATTRS bool EditLogicalOutput(IoStatementState &, const DataEdit &, bool);
+
+template <typename CHAR>
+RT_API_ATTRS bool ListDirectedCharacterOutput(IoStatementState &,
+ ListDirectedStatementState<Direction::Output> &, const CHAR *,
+ std::size_t chars);
+extern template RT_API_ATTRS bool ListDirectedCharacterOutput(
+ IoStatementState &, ListDirectedStatementState<Direction::Output> &,
+ const char *, std::size_t chars);
+extern template RT_API_ATTRS bool ListDirectedCharacterOutput(
+ IoStatementState &, ListDirectedStatementState<Direction::Output> &,
+ const char16_t *, std::size_t chars);
+extern template RT_API_ATTRS bool ListDirectedCharacterOutput(
+ IoStatementState &, ListDirectedStatementState<Direction::Output> &,
+ const char32_t *, std::size_t chars);
+
+template <typename CHAR>
+RT_API_ATTRS bool EditCharacterOutput(
+ IoStatementState &, const DataEdit &, const CHAR *, std::size_t chars);
+extern template RT_API_ATTRS bool EditCharacterOutput(
+ IoStatementState &, const DataEdit &, const char *, std::size_t chars);
+extern template RT_API_ATTRS bool EditCharacterOutput(
+ IoStatementState &, const DataEdit &, const char16_t *, std::size_t chars);
+extern template RT_API_ATTRS bool EditCharacterOutput(
+ IoStatementState &, const DataEdit &, const char32_t *, std::size_t chars);
+
+extern template RT_API_ATTRS bool EditIntegerOutput<1>(
+ IoStatementState &, const DataEdit &, std::int8_t, bool);
+extern template RT_API_ATTRS bool EditIntegerOutput<2>(
+ IoStatementState &, const DataEdit &, std::int16_t, bool);
+extern template RT_API_ATTRS bool EditIntegerOutput<4>(
+ IoStatementState &, const DataEdit &, std::int32_t, bool);
+extern template RT_API_ATTRS bool EditIntegerOutput<8>(
+ IoStatementState &, const DataEdit &, std::int64_t, bool);
+extern template RT_API_ATTRS bool EditIntegerOutput<16>(
+ IoStatementState &, const DataEdit &, common::int128_t, bool);
+
+extern template class RealOutputEditing<2>;
+extern template class RealOutputEditing<3>;
+extern template class RealOutputEditing<4>;
+extern template class RealOutputEditing<8>;
+extern template class RealOutputEditing<10>;
+// TODO: double/double
+extern template class RealOutputEditing<16>;
+
+RT_OFFLOAD_API_GROUP_END
+
+} // namespace Fortran::runtime::io
+#endif // FLANG_RT_RUNTIME_EDIT_OUTPUT_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/environment-default-list.h b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/environment-default-list.h
new file mode 100644
index 00000000000..76c0955bcce
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/environment-default-list.h
@@ -0,0 +1,30 @@
+/*===-- lib/flang_rt/environment-default-list.h ---------------------*- C -*-===
+ *
+ * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+ * See https://llvm.org/LICENSE.txt for license information.
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ *
+ *===----------------------------------------------------------------------===*/
+
+#ifndef FLANG_RT_ENVIRONMENT_DEFAULT_LIST_H_
+#define FLANG_RT_ENVIRONMENT_DEFAULT_LIST_H_
+
+/* Try to maintain C compatibility to make it easier to both define environment
+ * defaults in non-Fortran main programs as well as pass through the environment
+ * default list in C code.
+ */
+
+struct EnvironmentDefaultItem {
+ const char *name;
+ const char *value;
+};
+
+/* Default values for environment variables are packaged by lowering into an
+ * instance of this struct to be read and set by the runtime.
+ */
+struct EnvironmentDefaultList {
+ int numItems;
+ const struct EnvironmentDefaultItem *item;
+};
+
+#endif /* FLANG_RT_ENVIRONMENT_DEFAULT_LIST_H_ */
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/environment.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/environment.cpp
new file mode 100644
index 00000000000..0f0564403c0
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/environment.cpp
@@ -0,0 +1,252 @@
+//===-- lib/runtime/environment.cpp -----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang-rt/runtime/environment.h"
+#include "environment-default-list.h"
+#include "memory.h"
+#include "flang-rt/runtime/tools.h"
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <limits>
+
+#ifdef _WIN32
+extern char **_environ;
+#else
+extern char **environ;
+#endif
+
+namespace Fortran::runtime {
+
+#ifndef FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+RT_OFFLOAD_VAR_GROUP_BEGIN
+RT_VAR_ATTRS ExecutionEnvironment executionEnvironment;
+RT_OFFLOAD_VAR_GROUP_END
+#endif // FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+
+static void SetEnvironmentDefaults(const EnvironmentDefaultList *envDefaults) {
+ if (!envDefaults) {
+ return;
+ }
+
+ for (int itemIndex = 0; itemIndex < envDefaults->numItems; ++itemIndex) {
+ const char *name = envDefaults->item[itemIndex].name;
+ const char *value = envDefaults->item[itemIndex].value;
+#ifdef _WIN32
+ if (auto *x{std::getenv(name)}) {
+ continue;
+ }
+ if (_putenv_s(name, value) != 0) {
+#else
+ if (setenv(name, value, /*overwrite=*/0) == -1) {
+#endif
+ Fortran::runtime::Terminator{__FILE__, __LINE__}.Crash(
+ std::strerror(errno));
+ }
+ }
+}
+
+RT_OFFLOAD_API_GROUP_BEGIN
+Fortran::common::optional<Convert> GetConvertFromString(
+ const char *x, std::size_t n) {
+ static const char *keywords[]{
+ "UNKNOWN", "NATIVE", "LITTLE_ENDIAN", "BIG_ENDIAN", "SWAP", nullptr};
+ switch (IdentifyValue(x, n, keywords)) {
+ case 0:
+ return Convert::Unknown;
+ case 1:
+ return Convert::Native;
+ case 2:
+ return Convert::LittleEndian;
+ case 3:
+ return Convert::BigEndian;
+ case 4:
+ return Convert::Swap;
+ default:
+ return Fortran::common::nullopt;
+ }
+}
+RT_OFFLOAD_API_GROUP_END
+
+void ExecutionEnvironment::Configure(int ac, const char *av[],
+ const char *env[], const EnvironmentDefaultList *envDefaults) {
+ argc = ac;
+ argv = av;
+ SetEnvironmentDefaults(envDefaults);
+#ifdef _WIN32
+ envp = _environ;
+#else
+ envp = environ;
+#endif
+ listDirectedOutputLineLengthLimit = 79; // PGI default
+ defaultOutputRoundingMode =
+ decimal::FortranRounding::RoundNearest; // RP(==RN)
+ conversion = Convert::Unknown;
+
+ if (auto *x{std::getenv("FORT_FMT_RECL")}) {
+ char *end;
+ auto n{std::strtol(x, &end, 10)};
+ if (n > 0 && n < std::numeric_limits<int>::max() && *end == '\0') {
+ listDirectedOutputLineLengthLimit = n;
+ } else {
+ std::fprintf(
+ stderr, "Fortran runtime: FORT_FMT_RECL=%s is invalid; ignored\n", x);
+ }
+ }
+
+ if (auto *x{std::getenv("FORT_CONVERT")}) {
+ if (auto convert{GetConvertFromString(x, std::strlen(x))}) {
+ conversion = *convert;
+ } else {
+ std::fprintf(
+ stderr, "Fortran runtime: FORT_CONVERT=%s is invalid; ignored\n", x);
+ }
+ }
+
+ if (auto *x{std::getenv("NO_STOP_MESSAGE")}) {
+ char *end;
+ auto n{std::strtol(x, &end, 10)};
+ if (n >= 0 && n <= 1 && *end == '\0') {
+ noStopMessage = n != 0;
+ } else {
+ std::fprintf(stderr,
+ "Fortran runtime: NO_STOP_MESSAGE=%s is invalid; ignored\n", x);
+ }
+ }
+
+ if (auto *x{std::getenv("DEFAULT_UTF8")}) {
+ char *end;
+ auto n{std::strtol(x, &end, 10)};
+ if (n >= 0 && n <= 1 && *end == '\0') {
+ defaultUTF8 = n != 0;
+ } else {
+ std::fprintf(
+ stderr, "Fortran runtime: DEFAULT_UTF8=%s is invalid; ignored\n", x);
+ }
+ }
+
+ if (auto *x{std::getenv("FORT_CHECK_POINTER_DEALLOCATION")}) {
+ char *end;
+ auto n{std::strtol(x, &end, 10)};
+ if (n >= 0 && n <= 1 && *end == '\0') {
+ checkPointerDeallocation = n != 0;
+ } else {
+ std::fprintf(stderr,
+ "Fortran runtime: FORT_CHECK_POINTER_DEALLOCATION=%s is invalid; "
+ "ignored\n",
+ x);
+ }
+ }
+
+ if (auto *x{std::getenv("FLANG_RT_DEBUG")}) {
+ internalDebugging = std::strtol(x, nullptr, 10);
+ }
+
+ if (auto *x{std::getenv("ACC_OFFLOAD_STACK_SIZE")}) {
+ char *end;
+ auto n{std::strtoul(x, &end, 10)};
+ if (n > 0 && n < std::numeric_limits<std::size_t>::max() && *end == '\0') {
+ cudaStackLimit = n;
+ } else {
+ std::fprintf(stderr,
+ "Fortran runtime: ACC_OFFLOAD_STACK_SIZE=%s is invalid; ignored\n",
+ x);
+ }
+ }
+
+ if (auto *x{std::getenv("NV_CUDAFOR_DEVICE_IS_MANAGED")}) {
+ char *end;
+ auto n{std::strtol(x, &end, 10)};
+ if (n >= 0 && n <= 1 && *end == '\0') {
+ cudaDeviceIsManaged = n != 0;
+ } else {
+ std::fprintf(stderr,
+ "Fortran runtime: NV_CUDAFOR_DEVICE_IS_MANAGED=%s is invalid; "
+ "ignored\n",
+ x);
+ }
+ }
+
+ // TODO: Set RP/ROUND='PROCESSOR_DEFINED' from environment
+}
+
+const char *ExecutionEnvironment::GetEnv(
+ const char *name, std::size_t name_length, const Terminator &terminator) {
+ RUNTIME_CHECK(terminator, name && name_length);
+
+ OwningPtr<char> cStyleName{
+ SaveDefaultCharacter(name, name_length, terminator)};
+ RUNTIME_CHECK(terminator, cStyleName);
+
+ return std::getenv(cStyleName.get());
+}
+
+std::int32_t ExecutionEnvironment::SetEnv(const char *name,
+ std::size_t name_length, const char *value, std::size_t value_length,
+ const Terminator &terminator) {
+
+ RUNTIME_CHECK(terminator, name && name_length && value && value_length);
+
+ OwningPtr<char> cStyleName{
+ SaveDefaultCharacter(name, name_length, terminator)};
+ RUNTIME_CHECK(terminator, cStyleName);
+
+ OwningPtr<char> cStyleValue{
+ SaveDefaultCharacter(value, value_length, terminator)};
+ RUNTIME_CHECK(terminator, cStyleValue);
+
+ std::int32_t status{0};
+
+#ifdef _WIN32
+
+ status = _putenv_s(cStyleName.get(), cStyleValue.get());
+
+#else
+
+ constexpr int overwrite = 1;
+ status = setenv(cStyleName.get(), cStyleValue.get(), overwrite);
+
+#endif
+
+ if (status != 0) {
+ status = errno;
+ }
+
+ return status;
+}
+
+std::int32_t ExecutionEnvironment::UnsetEnv(
+ const char *name, std::size_t name_length, const Terminator &terminator) {
+
+ RUNTIME_CHECK(terminator, name && name_length);
+
+ OwningPtr<char> cStyleName{
+ SaveDefaultCharacter(name, name_length, terminator)};
+ RUNTIME_CHECK(terminator, cStyleName);
+
+ std::int32_t status{0};
+
+#ifdef _WIN32
+
+ // Passing empty string as value will unset the variable
+ status = _putenv_s(cStyleName.get(), "");
+
+#else
+
+ status = unsetenv(cStyleName.get());
+
+#endif
+
+ if (status != 0) {
+ status = errno;
+ }
+
+ return status;
+}
+
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/exceptions.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/exceptions.cpp
new file mode 100644
index 00000000000..e5ba06c92ca
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/exceptions.cpp
@@ -0,0 +1,201 @@
+//===-- lib/runtime/exceptions.cpp ------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Runtime exception support.
+
+#include "flang/Runtime/exceptions.h"
+#include "flang-rt/runtime/terminator.h"
+#include <cfenv>
+#if defined(__aarch64__) && defined(__GLIBC__)
+#include <fpu_control.h>
+#elif defined(__x86_64__) && !defined(_WIN32)
+#include <xmmintrin.h>
+#endif
+
+// File fenv.h usually, but not always, defines standard exceptions as both
+// enumerator values and preprocessor #defines. Some x86 environments also
+// define a nonstandard __FE_DENORM enumerator, but without a corresponding
+// #define, which makes it more difficult to determine if it is present or not.
+#ifndef FE_INVALID
+#define FE_INVALID 0
+#endif
+#ifndef FE_DIVBYZERO
+#define FE_DIVBYZERO 0
+#endif
+#ifndef FE_OVERFLOW
+#define FE_OVERFLOW 0
+#endif
+#ifndef FE_UNDERFLOW
+#define FE_UNDERFLOW 0
+#endif
+#ifndef FE_INEXACT
+#define FE_INEXACT 0
+#endif
+#if FE_INVALID == 1 && FE_DIVBYZERO == 4 && FE_OVERFLOW == 8 && \
+ FE_UNDERFLOW == 16 && FE_INEXACT == 32
+#define __FE_DENORM 2
+#else
+#define __FE_DENORM 0
+#endif
+
+namespace Fortran::runtime {
+
+extern "C" {
+
+// Map a set of Fortran ieee_arithmetic module exceptions to a libm fenv.h
+// excepts value.
+uint32_t RTNAME(MapException)(uint32_t excepts) {
+ Terminator terminator{__FILE__, __LINE__};
+
+ static constexpr uint32_t v{FE_INVALID};
+ static constexpr uint32_t s{__FE_DENORM};
+ static constexpr uint32_t z{FE_DIVBYZERO};
+ static constexpr uint32_t o{FE_OVERFLOW};
+ static constexpr uint32_t u{FE_UNDERFLOW};
+ static constexpr uint32_t x{FE_INEXACT};
+
+#define vm(p) p, p | v
+#define sm(p) vm(p), vm(p | s)
+#define zm(p) sm(p), sm(p | z)
+#define om(p) zm(p), zm(p | o)
+#define um(p) om(p), om(p | u)
+#define xm um(0), um(x)
+
+ static constexpr uint32_t map[]{xm};
+ static constexpr uint32_t mapSize{sizeof(map) / sizeof(uint32_t)};
+ static_assert(mapSize == 64);
+ if (excepts >= mapSize) {
+ terminator.Crash("Invalid excepts value: %d", excepts);
+ }
+ uint32_t except_value = map[excepts];
+ return except_value;
+}
+
+// The following exception processing routines have a libm call component,
+// and where available, an additional component for handling the nonstandard
+// ieee_denorm exception. The denorm component does not subsume the libm
+// component; both are needed.
+
+void RTNAME(feclearexcept)(uint32_t excepts) {
+ feclearexcept(excepts);
+#if defined(_MM_EXCEPT_DENORM)
+ _mm_setcsr(_mm_getcsr() & ~(excepts & _MM_EXCEPT_MASK));
+#endif
+}
+void RTNAME(feraiseexcept)(uint32_t excepts) {
+ feraiseexcept(excepts);
+#if defined(_MM_EXCEPT_DENORM)
+ _mm_setcsr(_mm_getcsr() | (excepts & _MM_EXCEPT_MASK));
+#endif
+}
+uint32_t RTNAME(fetestexcept)(uint32_t excepts) {
+#if defined(_MM_EXCEPT_DENORM)
+ return (_mm_getcsr() & _MM_EXCEPT_MASK & excepts) | fetestexcept(excepts);
+#else
+ return fetestexcept(excepts);
+#endif
+}
+void RTNAME(fedisableexcept)(uint32_t excepts) {
+#ifdef __USE_GNU
+ fedisableexcept(excepts);
+#endif
+#if defined(_MM_EXCEPT_DENORM)
+ _mm_setcsr(_mm_getcsr() | ((excepts & _MM_EXCEPT_MASK) << 7));
+#endif
+}
+void RTNAME(feenableexcept)(uint32_t excepts) {
+#ifdef __USE_GNU
+ feenableexcept(excepts);
+#endif
+#if defined(_MM_EXCEPT_DENORM)
+ _mm_setcsr(_mm_getcsr() & ~((excepts & _MM_EXCEPT_MASK) << 7));
+#endif
+}
+uint32_t RTNAME(fegetexcept)() {
+ uint32_t excepts = 0;
+#ifdef __USE_GNU
+ excepts = fegetexcept();
+#endif
+#if defined(_MM_EXCEPT_DENORM)
+ return (63 - ((_mm_getcsr() >> 7) & _MM_EXCEPT_MASK)) | excepts;
+#else
+ return excepts;
+#endif
+}
+
+// Check if the processor has the ability to control whether to halt or
+// continue execution when a given exception is raised.
+bool RTNAME(SupportHalting)([[maybe_unused]] uint32_t except) {
+#ifdef __USE_GNU
+ except = RTNAME(MapException)(except);
+ int currentSet = RTNAME(fegetexcept)(), flipSet;
+ if (currentSet & except) {
+ RTNAME(fedisableexcept)(except);
+ flipSet = RTNAME(fegetexcept)();
+ RTNAME(feenableexcept)(except);
+ } else {
+ RTNAME(feenableexcept)(except);
+ flipSet = RTNAME(fegetexcept)();
+ RTNAME(fedisableexcept)(except);
+ }
+ return currentSet != flipSet;
+#else
+ return false;
+#endif
+}
+
+// A hardware FZ (flush to zero) bit is the negation of the
+// ieee_[get|set]_underflow_mode GRADUAL argument.
+#if defined(_MM_FLUSH_ZERO_MASK)
+// The x86_64 MXCSR FZ bit affects computations of real kinds 3, 4, and 8.
+#elif defined(_FPU_GETCW)
+// The aarch64 FPCR FZ bit affects computations of real kinds 3, 4, and 8.
+// bit 24: FZ -- single, double precision flush to zero bit
+// bit 19: FZ16 -- half precision flush to zero bit [not currently relevant]
+#define _FPU_FPCR_FZ_MASK_ 0x01080000
+#endif
+
+bool RTNAME(GetUnderflowMode)(void) {
+#if defined(_MM_FLUSH_ZERO_MASK)
+ return _MM_GET_FLUSH_ZERO_MODE() == _MM_FLUSH_ZERO_OFF;
+#elif defined(_FPU_GETCW)
+ uint64_t fpcr;
+ _FPU_GETCW(fpcr);
+ return (fpcr & _FPU_FPCR_FZ_MASK_) == 0;
+#else
+ return false;
+#endif
+}
+void RTNAME(SetUnderflowMode)(bool flag) {
+#if defined(_MM_FLUSH_ZERO_MASK)
+ _MM_SET_FLUSH_ZERO_MODE(flag ? _MM_FLUSH_ZERO_OFF : _MM_FLUSH_ZERO_ON);
+#elif defined(_FPU_GETCW)
+ uint64_t fpcr;
+ _FPU_GETCW(fpcr);
+ if (flag) {
+ fpcr &= ~_FPU_FPCR_FZ_MASK_;
+ } else {
+ fpcr |= _FPU_FPCR_FZ_MASK_;
+ }
+ _FPU_SETCW(fpcr);
+#endif
+}
+
+size_t RTNAME(GetModesTypeSize)(void) {
+#ifdef __GLIBC_USE_IEC_60559_BFP_EXT
+ return sizeof(femode_t); // byte size of ieee_modes_type data
+#else
+ return 8; // femode_t is not defined
+#endif
+}
+size_t RTNAME(GetStatusTypeSize)(void) {
+ return sizeof(fenv_t); // byte size of ieee_status_type data
+}
+
+} // extern "C"
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/execute.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/execute.cpp
new file mode 100644
index 00000000000..779e040bebe
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/execute.cpp
@@ -0,0 +1,287 @@
+//===-- lib/runtime/execute.cpp ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang/Runtime/execute.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/environment.h"
+#include "flang-rt/runtime/stat.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+#include <cstdlib>
+#include <errno.h>
+#include <future>
+#include <limits>
+
+#ifdef _WIN32
+#include "flang/Common/windows-include.h"
+#else
+#include <signal.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#endif
+
+namespace Fortran::runtime {
+
+// cmdstat specified in 16.9.73
+// −1 if the processor does not support command line execution,
+// a processor-dependent positive value if an error condition occurs
+// −2 if no error condition occurs but WAIT is present with the value false
+// and the processor does not support asynchronous execution. Otherwise it is
+// assigned the value 0
+enum CMD_STAT {
+ ASYNC_NO_SUPPORT_ERR = -2, // system returns -1 with ENOENT
+ NO_SUPPORT_ERR = -1, // Linux setsid() returns -1
+ CMD_EXECUTED = 0, // command executed with no error
+ FORK_ERR = 1, // Linux fork() returns < 0
+ EXECL_ERR = 2, // system returns -1 with other errno
+ COMMAND_EXECUTION_ERR = 3, // exit code 1
+ COMMAND_CANNOT_EXECUTE_ERR = 4, // Linux exit code 126
+ COMMAND_NOT_FOUND_ERR = 5, // Linux exit code 127
+ INVALID_CL_ERR = 6, // cover all other non-zero exit code
+ SIGNAL_ERR = 7
+};
+
+// Override CopyCharsToDescriptor in tools.h, pass string directly
+void CopyCharsToDescriptor(const Descriptor &value, const char *rawValue) {
+ CopyCharsToDescriptor(value, rawValue, std::strlen(rawValue));
+}
+
+void CheckAndCopyCharsToDescriptor(
+ const Descriptor *value, const char *rawValue) {
+ if (value) {
+ CopyCharsToDescriptor(*value, rawValue);
+ }
+}
+
+void CheckAndStoreIntToDescriptor(
+ const Descriptor *intVal, std::int64_t value, Terminator &terminator) {
+ if (intVal) {
+ StoreIntToDescriptor(intVal, value, terminator);
+ }
+}
+
+// If a condition occurs that would assign a nonzero value to CMDSTAT but
+// the CMDSTAT variable is not present, error termination is initiated.
+std::int64_t TerminationCheck(std::int64_t status, const Descriptor *cmdstat,
+ const Descriptor *cmdmsg, Terminator &terminator) {
+ // On both Windows and Linux, errno is set when system returns -1.
+ if (status == -1) {
+ // On Windows, ENOENT means the command interpreter can't be found.
+ // On Linux, system calls execl with filepath "/bin/sh", ENOENT means the
+ // file pathname does not exist.
+ if (errno == ENOENT) {
+ if (!cmdstat) {
+ terminator.Crash("Command line execution is not supported, system "
+ "returns -1 with errno ENOENT.");
+ } else {
+ StoreIntToDescriptor(cmdstat, NO_SUPPORT_ERR, terminator);
+ CheckAndCopyCharsToDescriptor(cmdmsg,
+ "Command line execution is not supported, system returns -1 with "
+ "errno ENOENT.");
+ }
+ } else {
+ char err_buffer[30];
+ char msg[]{"Execution error with system status code: -1, errno: "};
+#ifdef _WIN32
+ if (strerror_s(err_buffer, sizeof(err_buffer), errno) != 0)
+#else
+ if (strerror_r(errno, err_buffer, sizeof(err_buffer)) != 0)
+#endif
+ terminator.Crash("errno to char msg failed.");
+ char *newMsg{static_cast<char *>(AllocateMemoryOrCrash(
+ terminator, std::strlen(msg) + std::strlen(err_buffer) + 1))};
+ std::strcat(newMsg, err_buffer);
+
+ if (!cmdstat) {
+ terminator.Crash(newMsg);
+ } else {
+ StoreIntToDescriptor(cmdstat, EXECL_ERR, terminator);
+ CheckAndCopyCharsToDescriptor(cmdmsg, newMsg);
+ }
+ FreeMemory(newMsg);
+ }
+ }
+
+#ifdef _WIN32
+ // On WIN32 API std::system returns exit status directly
+ std::int64_t exitStatusVal{status};
+ if (exitStatusVal != 0) {
+ if (!cmdstat) {
+ terminator.Crash(
+ "Invalid command quit with exit status code: %d", exitStatusVal);
+ } else {
+ StoreIntToDescriptor(cmdstat, INVALID_CL_ERR, terminator);
+ CheckAndCopyCharsToDescriptor(cmdmsg, "Invalid command line");
+ }
+ }
+#else
+ std::int64_t exitStatusVal{WEXITSTATUS(status)};
+ if (exitStatusVal == 1) {
+ if (!cmdstat) {
+ terminator.Crash("Command line execution failed with exit code: 1.");
+ } else {
+ StoreIntToDescriptor(cmdstat, COMMAND_EXECUTION_ERR, terminator);
+ CheckAndCopyCharsToDescriptor(
+ cmdmsg, "Command line execution failed with exit code: 1.");
+ }
+ } else if (exitStatusVal == 126) {
+ if (!cmdstat) {
+ terminator.Crash("Command cannot be executed with exit code: 126.");
+ } else {
+ StoreIntToDescriptor(cmdstat, COMMAND_CANNOT_EXECUTE_ERR, terminator);
+ CheckAndCopyCharsToDescriptor(
+ cmdmsg, "Command cannot be executed with exit code: 126.");
+ }
+ } else if (exitStatusVal == 127) {
+ if (!cmdstat) {
+ terminator.Crash("Command not found with exit code: 127.");
+ } else {
+ StoreIntToDescriptor(cmdstat, COMMAND_NOT_FOUND_ERR, terminator);
+ CheckAndCopyCharsToDescriptor(
+ cmdmsg, "Command not found with exit code: 127.");
+ }
+ // capture all other nonzero exit code
+ } else if (exitStatusVal != 0) {
+ if (!cmdstat) {
+ terminator.Crash(
+ "Invalid command quit with exit status code: %d", exitStatusVal);
+ } else {
+ StoreIntToDescriptor(cmdstat, INVALID_CL_ERR, terminator);
+ CheckAndCopyCharsToDescriptor(cmdmsg, "Invalid command line");
+ }
+ }
+#endif
+
+#if defined(WIFSIGNALED) && defined(WTERMSIG)
+ if (WIFSIGNALED(status)) {
+ if (!cmdstat) {
+ terminator.Crash("Killed by signal: %d", WTERMSIG(status));
+ } else {
+ StoreIntToDescriptor(cmdstat, SIGNAL_ERR, terminator);
+ CheckAndCopyCharsToDescriptor(cmdmsg, "Killed by signal");
+ }
+ }
+#endif
+
+#if defined(WIFSTOPPED) && defined(WSTOPSIG)
+ if (WIFSTOPPED(status)) {
+ if (!cmdstat) {
+ terminator.Crash("Stopped by signal: %d", WSTOPSIG(status));
+ } else {
+ StoreIntToDescriptor(cmdstat, SIGNAL_ERR, terminator);
+ CheckAndCopyCharsToDescriptor(cmdmsg, "Stopped by signal");
+ }
+ }
+#endif
+ return exitStatusVal;
+}
+
+void RTNAME(ExecuteCommandLine)(const Descriptor &command, bool wait,
+ const Descriptor *exitstat, const Descriptor *cmdstat,
+ const Descriptor *cmdmsg, const char *sourceFile, int line) {
+ Terminator terminator{sourceFile, line};
+ char *newCmd{EnsureNullTerminated(
+ command.OffsetElement(), command.ElementBytes(), terminator)};
+
+ if (exitstat) {
+ RUNTIME_CHECK(terminator, IsValidIntDescriptor(exitstat));
+ }
+
+ if (cmdstat) {
+ RUNTIME_CHECK(terminator, IsValidIntDescriptor(cmdstat));
+ // Assigned 0 as specifed in standard, if error then overwrite
+ StoreIntToDescriptor(cmdstat, CMD_EXECUTED, terminator);
+ }
+
+ if (cmdmsg) {
+ RUNTIME_CHECK(terminator, IsValidCharDescriptor(cmdmsg));
+ }
+
+ if (wait) {
+ // either wait is not specified or wait is true: synchronous mode
+ std::int64_t status{std::system(newCmd)};
+ std::int64_t exitStatusVal{
+ TerminationCheck(status, cmdstat, cmdmsg, terminator)};
+ // If sync, assigned processor-dependent exit status. Otherwise unchanged
+ CheckAndStoreIntToDescriptor(exitstat, exitStatusVal, terminator);
+ } else {
+// Asynchronous mode
+#ifdef _WIN32
+ STARTUPINFOW si;
+ PROCESS_INFORMATION pi;
+ ZeroMemory(&si, sizeof(si));
+ si.cb = sizeof(si);
+ ZeroMemory(&pi, sizeof(pi));
+
+ // add "cmd.exe /c " to the beginning of command
+ const char *prefix{"cmd.exe /c "};
+ char *newCmdWin{static_cast<char *>(AllocateMemoryOrCrash(
+ terminator, std::strlen(prefix) + std::strlen(newCmd) + 1))};
+ std::strcpy(newCmdWin, prefix);
+ std::strcat(newCmdWin, newCmd);
+
+ // Convert the char to wide char
+ const size_t sizeNeeded{mbstowcs(NULL, newCmdWin, 0) + 1};
+ wchar_t *wcmd{static_cast<wchar_t *>(
+ AllocateMemoryOrCrash(terminator, sizeNeeded * sizeof(wchar_t)))};
+ if (std::mbstowcs(wcmd, newCmdWin, sizeNeeded) == static_cast<size_t>(-1)) {
+ terminator.Crash("Char to wide char failed for newCmd");
+ }
+ FreeMemory(newCmdWin);
+
+ if (CreateProcessW(nullptr, wcmd, nullptr, nullptr, FALSE, 0, nullptr,
+ nullptr, &si, &pi)) {
+ // Close handles so it will be removed when terminated
+ CloseHandle(pi.hProcess);
+ CloseHandle(pi.hThread);
+ } else {
+ if (!cmdstat) {
+ terminator.Crash(
+ "CreateProcess failed with error code: %lu.", GetLastError());
+ } else {
+ StoreIntToDescriptor(cmdstat, ASYNC_NO_SUPPORT_ERR, terminator);
+ CheckAndCopyCharsToDescriptor(cmdmsg, "CreateProcess failed.");
+ }
+ }
+ FreeMemory(wcmd);
+#else
+ pid_t pid{fork()};
+ if (pid < 0) {
+ if (!cmdstat) {
+ terminator.Crash("Fork failed with pid: %d.", pid);
+ } else {
+ StoreIntToDescriptor(cmdstat, FORK_ERR, terminator);
+ CheckAndCopyCharsToDescriptor(cmdmsg, "Fork failed");
+ }
+ } else if (pid == 0) {
+ // Create a new session, let init process take care of zombie child
+ if (setsid() == -1) {
+ if (!cmdstat) {
+ terminator.Crash("setsid() failed with errno: %d, asynchronous "
+ "process initiation failed.",
+ errno);
+ } else {
+ StoreIntToDescriptor(cmdstat, ASYNC_NO_SUPPORT_ERR, terminator);
+ CheckAndCopyCharsToDescriptor(cmdmsg,
+ "setsid() failed, asynchronous process initiation failed.");
+ }
+ exit(EXIT_FAILURE);
+ }
+ std::int64_t status{std::system(newCmd)};
+ TerminationCheck(status, cmdstat, cmdmsg, terminator);
+ exit(status);
+ }
+#endif
+ }
+ // Deallocate memory if EnsureNullTerminated dynamically allocated memory
+ if (newCmd != command.OffsetElement()) {
+ FreeMemory(newCmd);
+ }
+}
+
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/extensions.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/extensions.cpp
new file mode 100644
index 00000000000..e70dff39972
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/extensions.cpp
@@ -0,0 +1,341 @@
+//===-- lib/runtime/extensions.cpp ------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// These C-coded entry points with Fortran-mangled names implement legacy
+// extensions that will eventually be implemented in Fortran.
+
+#include "flang/Runtime/extensions.h"
+#include "unit.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+#include "flang/Runtime/command.h"
+#include "flang/Runtime/entry-names.h"
+#include "flang/Runtime/io-api.h"
+#include "flang/Runtime/iostat-consts.h"
+#include <chrono>
+#include <cstdio>
+#include <cstring>
+#include <ctime>
+#include <signal.h>
+#include <stdlib.h>
+#include <thread>
+
+#ifdef _WIN32
+#define WIN32_LEAN_AND_MEAN
+#define NOMINMAX
+#include <windows.h>
+
+#include <synchapi.h>
+
+inline void CtimeBuffer(char *buffer, size_t bufsize, const time_t cur_time,
+ Fortran::runtime::Terminator terminator) {
+ int error{ctime_s(buffer, bufsize, &cur_time)};
+ RUNTIME_CHECK(terminator, error == 0);
+}
+#elif _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _BSD_SOURCE || _SVID_SOURCE || \
+ defined(_POSIX_SOURCE)
+inline void CtimeBuffer(char *buffer, size_t bufsize, const time_t cur_time,
+ Fortran::runtime::Terminator terminator) {
+ const char *res{ctime_r(&cur_time, buffer)};
+ RUNTIME_CHECK(terminator, res != nullptr);
+}
+#else
+inline void CtimeBuffer(char *buffer, size_t bufsize, const time_t cur_time,
+ Fortran::runtime::Terminator terminator) {
+ buffer[0] = '\0';
+ terminator.Crash("fdate is not supported.");
+}
+#endif
+
+#ifndef _WIN32
+// posix-compliant and has getlogin_r and F_OK
+#include <unistd.h>
+#else
+#include <direct.h>
+#endif
+
+extern "C" {
+
+namespace Fortran::runtime {
+
+gid_t RTNAME(GetGID)() {
+#ifdef _WIN32
+ // Group IDs don't exist on Windows, return 1 to avoid errors
+ return 1;
+#else
+ return getgid();
+#endif
+}
+
+uid_t RTNAME(GetUID)() {
+#ifdef _WIN32
+ // User IDs don't exist on Windows, return 1 to avoid errors
+ return 1;
+#else
+ return getuid();
+#endif
+}
+
+void GetUsernameEnvVar(const char *envName, char *arg, std::int64_t length) {
+ Descriptor name{*Descriptor::Create(
+ 1, std::strlen(envName) + 1, const_cast<char *>(envName), 0)};
+ Descriptor value{*Descriptor::Create(1, length, arg, 0)};
+
+ RTNAME(GetEnvVariable)
+ (name, &value, nullptr, false, nullptr, __FILE__, __LINE__);
+}
+
+namespace io {
+// SUBROUTINE FLUSH(N)
+// FLUSH N
+// END
+void FORTRAN_PROCEDURE_NAME(flush)(const int &unit) {
+ Cookie cookie{IONAME(BeginFlush)(unit, __FILE__, __LINE__)};
+ IONAME(EndIoStatement)(cookie);
+}
+} // namespace io
+
+// CALL FDATE(DATE)
+void FORTRAN_PROCEDURE_NAME(fdate)(char *arg, std::int64_t length) {
+ // Day Mon dd hh:mm:ss yyyy\n\0 is 26 characters, e.g.
+ // Tue May 26 21:51:03 2015\n\0
+ char str[26];
+ // Insufficient space, fill with spaces and return.
+ if (length < 24) {
+ std::memset(arg, ' ', length);
+ return;
+ }
+
+ Terminator terminator{__FILE__, __LINE__};
+ std::time_t current_time;
+ std::time(&current_time);
+ CtimeBuffer(str, sizeof(str), current_time, terminator);
+
+ // Pad space on the last two byte `\n\0`, start at index 24 included.
+ CopyAndPad(arg, str, length, 24);
+}
+
+std::intptr_t RTNAME(Malloc)(std::size_t size) {
+ return reinterpret_cast<std::intptr_t>(std::malloc(size));
+}
+
+// RESULT = IARGC()
+std::int32_t FORTRAN_PROCEDURE_NAME(iargc)() { return RTNAME(ArgumentCount)(); }
+
+// CALL GETARG(N, ARG)
+void FORTRAN_PROCEDURE_NAME(getarg)(
+ std::int32_t &n, char *arg, std::int64_t length) {
+ Descriptor value{*Descriptor::Create(1, length, arg, 0)};
+ (void)RTNAME(GetCommandArgument)(
+ n, &value, nullptr, nullptr, __FILE__, __LINE__);
+}
+
+// CALL GETLOG(USRNAME)
+void FORTRAN_PROCEDURE_NAME(getlog)(char *arg, std::int64_t length) {
+#if _REENTRANT || _POSIX_C_SOURCE >= 199506L
+ if (length >= 1 && getlogin_r(arg, length) == 0) {
+ auto loginLen{std::strlen(arg)};
+ std::memset(
+ arg + loginLen, ' ', static_cast<std::size_t>(length) - loginLen);
+ return;
+ }
+#endif
+#if _WIN32
+ GetUsernameEnvVar("USERNAME", arg, length);
+#else
+ GetUsernameEnvVar("LOGNAME", arg, length);
+#endif
+}
+
+void RTNAME(Free)(std::intptr_t ptr) {
+ std::free(reinterpret_cast<void *>(ptr));
+}
+
+std::int64_t RTNAME(Signal)(std::int64_t number, void (*handler)(int)) {
+ // using auto for portability:
+ // on Windows, this is a void *
+ // on POSIX, this has the same type as handler
+ auto result = signal(number, handler);
+
+ // GNU defines the intrinsic as returning an integer, not a pointer. So we
+ // have to reinterpret_cast
+ return static_cast<int64_t>(reinterpret_cast<std::uintptr_t>(result));
+}
+
+// CALL SLEEP(SECONDS)
+void RTNAME(Sleep)(std::int64_t seconds) {
+ // ensure that conversion to unsigned makes sense,
+ // sleep(0) is an immidiate return anyway
+ if (seconds < 1) {
+ return;
+ }
+#if _WIN32
+ Sleep(seconds * 1000);
+#else
+ sleep(seconds);
+#endif
+}
+
+// TODO: not supported on Windows
+#ifndef _WIN32
+std::int64_t FORTRAN_PROCEDURE_NAME(access)(const char *name,
+ std::int64_t nameLength, const char *mode, std::int64_t modeLength) {
+ std::int64_t ret{-1};
+ if (nameLength <= 0 || modeLength <= 0 || !name || !mode) {
+ return ret;
+ }
+
+ // ensure name is null terminated
+ char *newName{nullptr};
+ if (name[nameLength - 1] != '\0') {
+ newName = static_cast<char *>(std::malloc(nameLength + 1));
+ std::memcpy(newName, name, nameLength);
+ newName[nameLength] = '\0';
+ name = newName;
+ }
+
+ // calculate mode
+ bool read{false};
+ bool write{false};
+ bool execute{false};
+ bool exists{false};
+ int imode{0};
+
+ for (std::int64_t i = 0; i < modeLength; ++i) {
+ switch (mode[i]) {
+ case 'r':
+ read = true;
+ break;
+ case 'w':
+ write = true;
+ break;
+ case 'x':
+ execute = true;
+ break;
+ case ' ':
+ exists = true;
+ break;
+ default:
+ // invalid mode
+ goto cleanup;
+ }
+ }
+ if (!read && !write && !execute && !exists) {
+ // invalid mode
+ goto cleanup;
+ }
+
+ if (!read && !write && !execute) {
+ imode = F_OK;
+ } else {
+ if (read) {
+ imode |= R_OK;
+ }
+ if (write) {
+ imode |= W_OK;
+ }
+ if (execute) {
+ imode |= X_OK;
+ }
+ }
+ ret = access(name, imode);
+
+cleanup:
+ if (newName) {
+ free(newName);
+ }
+ return ret;
+}
+#endif
+
+// CHDIR(DIR)
+int RTNAME(Chdir)(const char *name) {
+// chdir alias seems to be deprecated on Windows.
+#ifndef _WIN32
+ return chdir(name);
+#else
+ return _chdir(name);
+#endif
+}
+
+int FORTRAN_PROCEDURE_NAME(hostnm)(char *hn, int length) {
+ std::int32_t status{0};
+
+ if (!hn || length < 0) {
+ return EINVAL;
+ }
+
+#ifdef _WIN32
+ DWORD dwSize{static_cast<DWORD>(length)};
+
+ // Note: Winsock has gethostname(), but use Win32 API GetComputerNameEx(),
+ // in order to avoid adding dependency on Winsock.
+ if (!GetComputerNameExA(ComputerNameDnsHostname, hn, &dwSize)) {
+ status = GetLastError();
+ }
+#else
+ if (gethostname(hn, length) < 0) {
+ status = errno;
+ }
+#endif
+
+ if (status == 0) {
+ // Find zero terminator and fill the string from the
+ // zero terminator to the end with spaces
+ char *str_end{hn + length};
+ char *str_zero{std::find(hn, str_end, '\0')};
+ std::fill(str_zero, str_end, ' ');
+ }
+
+ return status;
+}
+
+int FORTRAN_PROCEDURE_NAME(ierrno)() { return errno; }
+
+void FORTRAN_PROCEDURE_NAME(qsort)(int *array, int *len, int *isize,
+ int (*compar)(const void *, const void *)) {
+ qsort(array, *len, *isize, compar);
+}
+
+// PERROR(STRING)
+void RTNAME(Perror)(const char *str) { perror(str); }
+
+// GNU extension function TIME()
+std::int64_t RTNAME(time)() { return time(nullptr); }
+
+// Extension procedures related to I/O
+
+namespace io {
+std::int32_t RTNAME(Fseek)(int unitNumber, std::int64_t zeroBasedPos,
+ int whence, const char *sourceFileName, int lineNumber) {
+ if (ExternalFileUnit * unit{ExternalFileUnit::LookUp(unitNumber)}) {
+ Terminator terminator{sourceFileName, lineNumber};
+ IoErrorHandler handler{terminator};
+ if (unit->Fseek(
+ zeroBasedPos, static_cast<enum FseekWhence>(whence), handler)) {
+ return IostatOk;
+ } else {
+ return IostatCannotReposition;
+ }
+ } else {
+ return IostatBadUnitNumber;
+ }
+}
+
+std::int64_t RTNAME(Ftell)(int unitNumber) {
+ if (ExternalFileUnit * unit{ExternalFileUnit::LookUp(unitNumber)}) {
+ return unit->InquirePos() - 1; // zero-based result
+ } else {
+ return -1;
+ }
+}
+} // namespace io
+
+} // namespace Fortran::runtime
+} // extern "C"
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/external-unit.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/external-unit.cpp
new file mode 100644
index 00000000000..b8004d63159
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/external-unit.cpp
@@ -0,0 +1,355 @@
+//===-- lib/runtime/external-unit.cpp ---------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Implemenation of ExternalFileUnit for RT_USE_PSEUDO_FILE_UNIT=0.
+//
+//===----------------------------------------------------------------------===//
+
+#include "unit-map.h"
+#include "unit.h"
+#include "flang-rt/runtime/io-error.h"
+#include "flang-rt/runtime/lock.h"
+#include "flang-rt/runtime/tools.h"
+
+// NOTE: the header files above may define OpenMP declare target
+// variables, so they have to be included unconditionally
+// so that the offload entries are consistent between host and device.
+#if !defined(RT_USE_PSEUDO_FILE_UNIT)
+
+#include <cstdio>
+#include <limits>
+
+namespace Fortran::runtime::io {
+
+// The per-unit data structures are created on demand so that Fortran I/O
+// should work without a Fortran main program.
+static Lock unitMapLock;
+static Lock createOpenLock;
+static UnitMap *unitMap{nullptr};
+
+void FlushOutputOnCrash(const Terminator &terminator) {
+ if (!defaultOutput && !errorOutput) {
+ return;
+ }
+ IoErrorHandler handler{terminator};
+ handler.HasIoStat(); // prevent nested crash if flush has error
+ CriticalSection critical{unitMapLock};
+ if (defaultOutput) {
+ defaultOutput->FlushOutput(handler);
+ }
+ if (errorOutput) {
+ errorOutput->FlushOutput(handler);
+ }
+}
+
+ExternalFileUnit *ExternalFileUnit::LookUp(int unit) {
+ return GetUnitMap().LookUp(unit);
+}
+
+ExternalFileUnit *ExternalFileUnit::LookUpOrCreate(
+ int unit, const Terminator &terminator, bool &wasExtant) {
+ return GetUnitMap().LookUpOrCreate(unit, terminator, wasExtant);
+}
+
+ExternalFileUnit *ExternalFileUnit::LookUpOrCreateAnonymous(int unit,
+ Direction dir, Fortran::common::optional<bool> isUnformatted,
+ IoErrorHandler &handler) {
+ // Make sure that the returned anonymous unit has been opened,
+ // not just created in the unitMap.
+ CriticalSection critical{createOpenLock};
+ bool exists{false};
+ ExternalFileUnit *result{GetUnitMap().LookUpOrCreate(unit, handler, exists)};
+ if (result && !exists) {
+ common::optional<Action> action;
+ if (dir == Direction::Output) {
+ action = Action::ReadWrite;
+ }
+ if (!result->OpenAnonymousUnit(
+ dir == Direction::Input ? OpenStatus::Unknown : OpenStatus::Replace,
+ action, Position::Rewind, Convert::Unknown, handler)) {
+ // fort.N isn't a writable file
+ if (ExternalFileUnit * closed{LookUpForClose(result->unitNumber())}) {
+ closed->DestroyClosed();
+ }
+ result = nullptr;
+ } else {
+ result->isUnformatted = isUnformatted;
+ }
+ }
+ return result;
+}
+
+ExternalFileUnit *ExternalFileUnit::LookUp(
+ const char *path, std::size_t pathLen) {
+ return GetUnitMap().LookUp(path, pathLen);
+}
+
+ExternalFileUnit &ExternalFileUnit::CreateNew(
+ int unit, const Terminator &terminator) {
+ bool wasExtant{false};
+ ExternalFileUnit *result{
+ GetUnitMap().LookUpOrCreate(unit, terminator, wasExtant)};
+ RUNTIME_CHECK(terminator, result && !wasExtant);
+ return *result;
+}
+
+ExternalFileUnit *ExternalFileUnit::LookUpForClose(int unit) {
+ return GetUnitMap().LookUpForClose(unit);
+}
+
+ExternalFileUnit &ExternalFileUnit::NewUnit(
+ const Terminator &terminator, bool forChildIo) {
+ ExternalFileUnit &unit{GetUnitMap().NewUnit(terminator)};
+ unit.createdForInternalChildIo_ = forChildIo;
+ return unit;
+}
+
+bool ExternalFileUnit::OpenUnit(Fortran::common::optional<OpenStatus> status,
+ Fortran::common::optional<Action> action, Position position,
+ OwningPtr<char> &&newPath, std::size_t newPathLength, Convert convert,
+ IoErrorHandler &handler) {
+ if (convert == Convert::Unknown) {
+ convert = executionEnvironment.conversion;
+ }
+ swapEndianness_ = convert == Convert::Swap ||
+ (convert == Convert::LittleEndian && !isHostLittleEndian) ||
+ (convert == Convert::BigEndian && isHostLittleEndian);
+ bool impliedClose{false};
+ if (IsConnected()) {
+ bool isSamePath{newPath.get() && path() && pathLength() == newPathLength &&
+ std::memcmp(path(), newPath.get(), newPathLength) == 0};
+ if (status && *status != OpenStatus::Old && isSamePath) {
+ handler.SignalError("OPEN statement for connected unit may not have "
+ "explicit STATUS= other than 'OLD'");
+ return impliedClose;
+ }
+ if (!newPath.get() || isSamePath) {
+ // OPEN of existing unit, STATUS='OLD' or unspecified, not new FILE=
+ newPath.reset();
+ return impliedClose;
+ }
+ // Otherwise, OPEN on open unit with new FILE= implies CLOSE
+ DoImpliedEndfile(handler);
+ FlushOutput(handler);
+ TruncateFrame(0, handler);
+ Close(CloseStatus::Keep, handler);
+ impliedClose = true;
+ }
+ if (newPath.get() && newPathLength > 0) {
+ if (const auto *already{
+ GetUnitMap().LookUp(newPath.get(), newPathLength)}) {
+ handler.SignalError(IostatOpenAlreadyConnected,
+ "OPEN(UNIT=%d,FILE='%.*s'): file is already connected to unit %d",
+ unitNumber_, static_cast<int>(newPathLength), newPath.get(),
+ already->unitNumber_);
+ return impliedClose;
+ }
+ }
+ set_path(std::move(newPath), newPathLength);
+ Open(status.value_or(OpenStatus::Unknown), action, position, handler);
+ if (handler.InError()) {
+ return impliedClose;
+ }
+ auto totalBytes{knownSize()};
+ if (access == Access::Direct) {
+ if (!openRecl) {
+ handler.SignalError(IostatOpenBadRecl,
+ "OPEN(UNIT=%d,ACCESS='DIRECT'): record length is not known",
+ unitNumber());
+ } else if (*openRecl <= 0) {
+ handler.SignalError(IostatOpenBadRecl,
+ "OPEN(UNIT=%d,ACCESS='DIRECT',RECL=%jd): record length is invalid",
+ unitNumber(), static_cast<std::intmax_t>(*openRecl));
+ } else if (totalBytes && (*totalBytes % *openRecl != 0)) {
+ handler.SignalError(IostatOpenBadRecl,
+ "OPEN(UNIT=%d,ACCESS='DIRECT',RECL=%jd): record length is not an "
+ "even divisor of the file size %jd",
+ unitNumber(), static_cast<std::intmax_t>(*openRecl),
+ static_cast<std::intmax_t>(*totalBytes));
+ }
+ recordLength = openRecl;
+ }
+ endfileRecordNumber.reset();
+ currentRecordNumber = 1;
+ if (totalBytes && access == Access::Direct && openRecl.value_or(0) > 0) {
+ endfileRecordNumber = 1 + (*totalBytes / *openRecl);
+ }
+ if (position == Position::Append) {
+ if (totalBytes) {
+ frameOffsetInFile_ = *totalBytes;
+ }
+ if (access != Access::Stream) {
+ if (!endfileRecordNumber) {
+ // Fake it so that we can backspace relative from the end
+ endfileRecordNumber = std::numeric_limits<std::int64_t>::max() - 2;
+ }
+ currentRecordNumber = *endfileRecordNumber;
+ }
+ }
+ return impliedClose;
+}
+
+bool ExternalFileUnit::OpenAnonymousUnit(
+ Fortran::common::optional<OpenStatus> status,
+ Fortran::common::optional<Action> action, Position position,
+ Convert convert, IoErrorHandler &handler) {
+ // I/O to an unconnected unit reads/creates a local file, e.g. fort.7
+ std::size_t pathMaxLen{32};
+ auto path{SizedNew<char>{handler}(pathMaxLen)};
+ std::snprintf(path.get(), pathMaxLen, "fort.%d", unitNumber_);
+ OpenUnit(status, action, position, std::move(path), std::strlen(path.get()),
+ convert, handler);
+ return IsConnected();
+}
+
+void ExternalFileUnit::CloseUnit(CloseStatus status, IoErrorHandler &handler) {
+ DoImpliedEndfile(handler);
+ FlushOutput(handler);
+ Close(status, handler);
+}
+
+void ExternalFileUnit::DestroyClosed() {
+ GetUnitMap().DestroyClosed(*this); // destroys *this
+}
+
+Iostat ExternalFileUnit::SetDirection(Direction direction) {
+ if (direction == Direction::Input) {
+ if (mayRead()) {
+ direction_ = Direction::Input;
+ return IostatOk;
+ } else {
+ return IostatReadFromWriteOnly;
+ }
+ } else {
+ if (mayWrite()) {
+ if (direction_ == Direction::Input) {
+ // Don't retain any input data from previous record, like a
+ // variable-length unformatted record footer, in the frame,
+ // since we're going start writing frames.
+ frameOffsetInFile_ += recordOffsetInFrame_;
+ recordOffsetInFrame_ = 0;
+ }
+ direction_ = Direction::Output;
+ return IostatOk;
+ } else {
+ return IostatWriteToReadOnly;
+ }
+ }
+}
+
+UnitMap &ExternalFileUnit::CreateUnitMap() {
+ Terminator terminator{__FILE__, __LINE__};
+ IoErrorHandler handler{terminator};
+ UnitMap &newUnitMap{*New<UnitMap>{terminator}().release()};
+
+ bool wasExtant{false};
+ ExternalFileUnit &out{*newUnitMap.LookUpOrCreate(
+ FORTRAN_DEFAULT_OUTPUT_UNIT, terminator, wasExtant)};
+ RUNTIME_CHECK(terminator, !wasExtant);
+ out.Predefine(1);
+ handler.SignalError(out.SetDirection(Direction::Output));
+ out.isUnformatted = false;
+ defaultOutput = &out;
+
+ ExternalFileUnit &in{*newUnitMap.LookUpOrCreate(
+ FORTRAN_DEFAULT_INPUT_UNIT, terminator, wasExtant)};
+ RUNTIME_CHECK(terminator, !wasExtant);
+ in.Predefine(0);
+ handler.SignalError(in.SetDirection(Direction::Input));
+ in.isUnformatted = false;
+ defaultInput = &in;
+
+ ExternalFileUnit &error{
+ *newUnitMap.LookUpOrCreate(FORTRAN_ERROR_UNIT, terminator, wasExtant)};
+ RUNTIME_CHECK(terminator, !wasExtant);
+ error.Predefine(2);
+ handler.SignalError(error.SetDirection(Direction::Output));
+ error.isUnformatted = false;
+ errorOutput = &error;
+
+ return newUnitMap;
+}
+
+// A back-up atexit() handler for programs that don't terminate with a main
+// program END or a STOP statement or other Fortran-initiated program shutdown,
+// such as programs with a C main() that terminate normally. It flushes all
+// external I/O units. It is registered once the first time that any external
+// I/O is attempted.
+static void CloseAllExternalUnits() {
+ IoErrorHandler handler{"Fortran program termination"};
+ ExternalFileUnit::CloseAll(handler);
+}
+
+UnitMap &ExternalFileUnit::GetUnitMap() {
+ if (unitMap) {
+ return *unitMap;
+ }
+ {
+ CriticalSection critical{unitMapLock};
+ if (unitMap) {
+ return *unitMap;
+ }
+ unitMap = &CreateUnitMap();
+ }
+ std::atexit(CloseAllExternalUnits);
+ return *unitMap;
+}
+
+void ExternalFileUnit::CloseAll(IoErrorHandler &handler) {
+ CriticalSection critical{unitMapLock};
+ if (unitMap) {
+ unitMap->CloseAll(handler);
+ FreeMemoryAndNullify(unitMap);
+ }
+ defaultOutput = nullptr;
+ defaultInput = nullptr;
+ errorOutput = nullptr;
+}
+
+void ExternalFileUnit::FlushAll(IoErrorHandler &handler) {
+ CriticalSection critical{unitMapLock};
+ if (unitMap) {
+ unitMap->FlushAll(handler);
+ }
+}
+
+int ExternalFileUnit::GetAsynchronousId(IoErrorHandler &handler) {
+ if (!mayAsynchronous()) {
+ handler.SignalError(IostatBadAsynchronous);
+ return -1;
+ } else {
+ for (int j{0}; 64 * j < maxAsyncIds; ++j) {
+ if (auto least{asyncIdAvailable_[j].LeastElement()}) {
+ asyncIdAvailable_[j].reset(*least);
+ return 64 * j + static_cast<int>(*least);
+ }
+ }
+ handler.SignalError(IostatTooManyAsyncOps);
+ return -1;
+ }
+}
+
+bool ExternalFileUnit::Wait(int id) {
+ if (static_cast<std::size_t>(id) >= maxAsyncIds ||
+ asyncIdAvailable_[id / 64].test(id % 64)) {
+ return false;
+ } else {
+ if (id == 0) { // means "all IDs"
+ for (int j{0}; 64 * j < maxAsyncIds; ++j) {
+ asyncIdAvailable_[j].set();
+ }
+ asyncIdAvailable_[0].reset(0);
+ } else {
+ asyncIdAvailable_[id / 64].set(id % 64);
+ }
+ return true;
+ }
+}
+
+} // namespace Fortran::runtime::io
+#endif // !defined(RT_USE_PSEUDO_FILE_UNIT)
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/extrema.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/extrema.cpp
new file mode 100644
index 00000000000..03e574a8fbf
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/extrema.cpp
@@ -0,0 +1,888 @@
+//===-- lib/runtime/extrema.cpp ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Implements MAXLOC, MINLOC, MAXVAL, & MINVAL for all required operand types
+// and shapes and (for MAXLOC & MINLOC) result integer kinds. Also implements
+// NORM2 using common infrastructure.
+
+#include "flang-rt/runtime/reduction-templates.h"
+#include "flang/Common/float128.h"
+#include "flang/Runtime/character.h"
+#include "flang/Runtime/reduction.h"
+#include <algorithm>
+#include <cfloat>
+#include <cinttypes>
+#include <cmath>
+#include <type_traits>
+
+namespace Fortran::runtime {
+
+// MAXLOC & MINLOC
+
+template <typename T, bool IS_MAX, bool BACK> struct NumericCompare {
+ using Type = T;
+ explicit RT_API_ATTRS NumericCompare(std::size_t /*elemLen; ignored*/) {}
+ RT_API_ATTRS bool operator()(const T &value, const T &previous) const {
+ if (std::is_floating_point_v<T> && previous != previous) {
+ return BACK || value == value; // replace NaN
+ } else if (value == previous) {
+ return BACK;
+ } else if constexpr (IS_MAX) {
+ return value > previous;
+ } else {
+ return value < previous;
+ }
+ }
+};
+
+template <typename T, bool IS_MAX, bool BACK> class CharacterCompare {
+public:
+ using Type = T;
+ explicit RT_API_ATTRS CharacterCompare(std::size_t elemLen)
+ : chars_{elemLen / sizeof(T)} {}
+ RT_API_ATTRS bool operator()(const T &value, const T &previous) const {
+ int cmp{CharacterScalarCompare<T>(&value, &previous, chars_, chars_)};
+ if (cmp == 0) {
+ return BACK;
+ } else if constexpr (IS_MAX) {
+ return cmp > 0;
+ } else {
+ return cmp < 0;
+ }
+ }
+
+private:
+ std::size_t chars_;
+};
+
+template <typename COMPARE> class ExtremumLocAccumulator {
+public:
+ using Type = typename COMPARE::Type;
+ RT_API_ATTRS ExtremumLocAccumulator(const Descriptor &array)
+ : array_{array}, argRank_{array.rank()}, compare_{array.ElementBytes()} {
+ Reinitialize();
+ }
+ RT_API_ATTRS void Reinitialize() {
+ // per standard: result indices are all zero if no data
+ for (int j{0}; j < argRank_; ++j) {
+ extremumLoc_[j] = 0;
+ }
+ previous_ = nullptr;
+ }
+ RT_API_ATTRS int argRank() const { return argRank_; }
+ template <typename A>
+ RT_API_ATTRS void GetResult(A *p, int zeroBasedDim = -1) {
+ if (zeroBasedDim >= 0) {
+ *p = extremumLoc_[zeroBasedDim];
+ } else {
+ for (int j{0}; j < argRank_; ++j) {
+ p[j] = extremumLoc_[j];
+ }
+ }
+ }
+ template <typename IGNORED>
+ RT_API_ATTRS bool AccumulateAt(const SubscriptValue at[]) {
+ const auto &value{*array_.Element<Type>(at)};
+ if (!previous_ || compare_(value, *previous_)) {
+ previous_ = &value;
+ for (int j{0}; j < argRank_; ++j) {
+ extremumLoc_[j] = at[j] - array_.GetDimension(j).LowerBound() + 1;
+ }
+ }
+ return true;
+ }
+
+private:
+ const Descriptor &array_;
+ int argRank_;
+ SubscriptValue extremumLoc_[maxRank];
+ const Type *previous_{nullptr};
+ COMPARE compare_;
+};
+
+template <typename ACCUMULATOR, typename CPPTYPE>
+static RT_API_ATTRS void LocationHelper(const char *intrinsic,
+ Descriptor &result, const Descriptor &x, int kind, const Descriptor *mask,
+ Terminator &terminator) {
+ ACCUMULATOR accumulator{x};
+ DoTotalReduction<CPPTYPE>(x, 0, mask, accumulator, intrinsic, terminator);
+ ApplyIntegerKind<LocationResultHelper<ACCUMULATOR>::template Functor, void>(
+ kind, terminator, accumulator, result);
+}
+
+template <TypeCategory CAT, int KIND, bool IS_MAX,
+ template <typename, bool, bool> class COMPARE>
+inline RT_API_ATTRS void DoMaxOrMinLoc(const char *intrinsic,
+ Descriptor &result, const Descriptor &x, int kind, const char *source,
+ int line, const Descriptor *mask, bool back) {
+ using CppType = CppTypeFor<CAT, KIND>;
+ Terminator terminator{source, line};
+ if (back) {
+ LocationHelper<ExtremumLocAccumulator<COMPARE<CppType, IS_MAX, true>>,
+ CppType>(intrinsic, result, x, kind, mask, terminator);
+ } else {
+ LocationHelper<ExtremumLocAccumulator<COMPARE<CppType, IS_MAX, false>>,
+ CppType>(intrinsic, result, x, kind, mask, terminator);
+ }
+}
+
+template <bool IS_MAX> struct CharacterMaxOrMinLocHelper {
+ template <int KIND> struct Functor {
+ RT_API_ATTRS void operator()(const char *intrinsic, Descriptor &result,
+ const Descriptor &x, int kind, const char *source, int line,
+ const Descriptor *mask, bool back) const {
+ DoMaxOrMinLoc<TypeCategory::Character, KIND, IS_MAX, CharacterCompare>(
+ intrinsic, result, x, kind, source, line, mask, back);
+ }
+ };
+};
+
+template <bool IS_MAX>
+inline RT_API_ATTRS void CharacterMaxOrMinLoc(const char *intrinsic,
+ Descriptor &result, const Descriptor &x, int kind, const char *source,
+ int line, const Descriptor *mask, bool back) {
+ int rank{x.rank()};
+ SubscriptValue extent[1]{rank};
+ result.Establish(TypeCategory::Integer, kind, nullptr, 1, extent,
+ CFI_attribute_allocatable);
+ result.GetDimension(0).SetBounds(1, extent[0]);
+ Terminator terminator{source, line};
+ if (int stat{result.Allocate(kNoAsyncObject)}) {
+ terminator.Crash(
+ "%s: could not allocate memory for result; STAT=%d", intrinsic, stat);
+ }
+ CheckIntegerKind(terminator, kind, intrinsic);
+ auto catKind{x.type().GetCategoryAndKind()};
+ RUNTIME_CHECK(terminator, catKind.has_value());
+ switch (catKind->first) {
+ case TypeCategory::Character:
+ ApplyCharacterKind<CharacterMaxOrMinLocHelper<IS_MAX>::template Functor,
+ void>(catKind->second, terminator, intrinsic, result, x, kind, source,
+ line, mask, back);
+ break;
+ default:
+ terminator.Crash(
+ "%s: bad data type code (%d) for array", intrinsic, x.type().raw());
+ }
+}
+
+template <TypeCategory CAT, int KIND, bool IS_MAXVAL>
+inline RT_API_ATTRS void TotalNumericMaxOrMinLoc(const char *intrinsic,
+ Descriptor &result, const Descriptor &x, int kind, const char *source,
+ int line, const Descriptor *mask, bool back) {
+ int rank{x.rank()};
+ SubscriptValue extent[1]{rank};
+ result.Establish(TypeCategory::Integer, kind, nullptr, 1, extent,
+ CFI_attribute_allocatable);
+ result.GetDimension(0).SetBounds(1, extent[0]);
+ Terminator terminator{source, line};
+ if (int stat{result.Allocate(kNoAsyncObject)}) {
+ terminator.Crash(
+ "%s: could not allocate memory for result; STAT=%d", intrinsic, stat);
+ }
+ CheckIntegerKind(terminator, kind, intrinsic);
+ RUNTIME_CHECK(terminator, TypeCode(CAT, KIND) == x.type());
+ DoMaxOrMinLoc<CAT, KIND, IS_MAXVAL, NumericCompare>(
+ intrinsic, result, x, kind, source, line, mask, back);
+}
+
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+void RTDEF(MaxlocCharacter)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ CharacterMaxOrMinLoc<true>(
+ "MAXLOC", result, x, kind, source, line, mask, back);
+}
+void RTDEF(MaxlocInteger1)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Integer, 1, true>(
+ "MAXLOC", result, x, kind, source, line, mask, back);
+}
+void RTDEF(MaxlocInteger2)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Integer, 2, true>(
+ "MAXLOC", result, x, kind, source, line, mask, back);
+}
+void RTDEF(MaxlocInteger4)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Integer, 4, true>(
+ "MAXLOC", result, x, kind, source, line, mask, back);
+}
+void RTDEF(MaxlocInteger8)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Integer, 8, true>(
+ "MAXLOC", result, x, kind, source, line, mask, back);
+}
+#ifdef __SIZEOF_INT128__
+void RTDEF(MaxlocInteger16)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Integer, 16, true>(
+ "MAXLOC", result, x, kind, source, line, mask, back);
+}
+#endif
+void RTDEF(MaxlocUnsigned1)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Unsigned, 1, true>(
+ "MAXLOC", result, x, kind, source, line, mask, back);
+}
+void RTDEF(MaxlocUnsigned2)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Unsigned, 2, true>(
+ "MAXLOC", result, x, kind, source, line, mask, back);
+}
+void RTDEF(MaxlocUnsigned4)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Unsigned, 4, true>(
+ "MAXLOC", result, x, kind, source, line, mask, back);
+}
+void RTDEF(MaxlocUnsigned8)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Unsigned, 8, true>(
+ "MAXLOC", result, x, kind, source, line, mask, back);
+}
+#ifdef __SIZEOF_INT128__
+void RTDEF(MaxlocUnsigned16)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Unsigned, 16, true>(
+ "MAXLOC", result, x, kind, source, line, mask, back);
+}
+#endif
+void RTDEF(MaxlocReal4)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Real, 4, true>(
+ "MAXLOC", result, x, kind, source, line, mask, back);
+}
+void RTDEF(MaxlocReal8)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Real, 8, true>(
+ "MAXLOC", result, x, kind, source, line, mask, back);
+}
+#if HAS_FLOAT80
+void RTDEF(MaxlocReal10)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Real, 10, true>(
+ "MAXLOC", result, x, kind, source, line, mask, back);
+}
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+void RTDEF(MaxlocReal16)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Real, 16, true>(
+ "MAXLOC", result, x, kind, source, line, mask, back);
+}
+#endif
+void RTDEF(MinlocCharacter)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ CharacterMaxOrMinLoc<false>(
+ "MINLOC", result, x, kind, source, line, mask, back);
+}
+void RTDEF(MinlocInteger1)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Integer, 1, false>(
+ "MINLOC", result, x, kind, source, line, mask, back);
+}
+void RTDEF(MinlocInteger2)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Integer, 2, false>(
+ "MINLOC", result, x, kind, source, line, mask, back);
+}
+void RTDEF(MinlocInteger4)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Integer, 4, false>(
+ "MINLOC", result, x, kind, source, line, mask, back);
+}
+void RTDEF(MinlocInteger8)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Integer, 8, false>(
+ "MINLOC", result, x, kind, source, line, mask, back);
+}
+#ifdef __SIZEOF_INT128__
+void RTDEF(MinlocInteger16)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Integer, 16, false>(
+ "MINLOC", result, x, kind, source, line, mask, back);
+}
+#endif
+void RTDEF(MinlocUnsigned1)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Unsigned, 1, false>(
+ "MINLOC", result, x, kind, source, line, mask, back);
+}
+void RTDEF(MinlocUnsigned2)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Unsigned, 2, false>(
+ "MINLOC", result, x, kind, source, line, mask, back);
+}
+void RTDEF(MinlocUnsigned4)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Unsigned, 4, false>(
+ "MINLOC", result, x, kind, source, line, mask, back);
+}
+void RTDEF(MinlocUnsigned8)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Unsigned, 8, false>(
+ "MINLOC", result, x, kind, source, line, mask, back);
+}
+#ifdef __SIZEOF_INT128__
+void RTDEF(MinlocUnsigned16)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Unsigned, 16, false>(
+ "MINLOC", result, x, kind, source, line, mask, back);
+}
+#endif
+void RTDEF(MinlocReal4)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Real, 4, false>(
+ "MINLOC", result, x, kind, source, line, mask, back);
+}
+void RTDEF(MinlocReal8)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Real, 8, false>(
+ "MINLOC", result, x, kind, source, line, mask, back);
+}
+#if HAS_FLOAT80
+void RTDEF(MinlocReal10)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Real, 10, false>(
+ "MINLOC", result, x, kind, source, line, mask, back);
+}
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+void RTDEF(MinlocReal16)(Descriptor &result, const Descriptor &x, int kind,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ TotalNumericMaxOrMinLoc<TypeCategory::Real, 16, false>(
+ "MINLOC", result, x, kind, source, line, mask, back);
+}
+#endif
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+
+// MAXLOC/MINLOC with DIM=
+
+template <TypeCategory CAT, int KIND, bool IS_MAX,
+ template <typename, bool, bool> class COMPARE, bool BACK>
+static RT_API_ATTRS void DoPartialMaxOrMinLocDirection(const char *intrinsic,
+ Descriptor &result, const Descriptor &x, int kind, int dim,
+ const Descriptor *mask, Terminator &terminator) {
+ using CppType = CppTypeFor<CAT, KIND>;
+ using Accumulator = ExtremumLocAccumulator<COMPARE<CppType, IS_MAX, BACK>>;
+ Accumulator accumulator{x};
+ ApplyIntegerKind<PartialLocationHelper<Accumulator>::template Functor, void>(
+ kind, terminator, result, x, dim, mask, terminator, intrinsic,
+ accumulator);
+}
+
+template <TypeCategory CAT, int KIND, bool IS_MAX,
+ template <typename, bool, bool> class COMPARE>
+inline RT_API_ATTRS void DoPartialMaxOrMinLoc(const char *intrinsic,
+ Descriptor &result, const Descriptor &x, int kind, int dim,
+ const Descriptor *mask, bool back, Terminator &terminator) {
+ if (back) {
+ DoPartialMaxOrMinLocDirection<CAT, KIND, IS_MAX, COMPARE, true>(
+ intrinsic, result, x, kind, dim, mask, terminator);
+ } else {
+ DoPartialMaxOrMinLocDirection<CAT, KIND, IS_MAX, COMPARE, false>(
+ intrinsic, result, x, kind, dim, mask, terminator);
+ }
+}
+
+template <TypeCategory CAT, bool IS_MAX,
+ template <typename, bool, bool> class COMPARE>
+struct DoPartialMaxOrMinLocHelper {
+ template <int KIND> struct Functor {
+ RT_API_ATTRS void operator()(const char *intrinsic, Descriptor &result,
+ const Descriptor &x, int kind, int dim, const Descriptor *mask,
+ bool back, Terminator &terminator) const {
+ DoPartialMaxOrMinLoc<CAT, KIND, IS_MAX, COMPARE>(
+ intrinsic, result, x, kind, dim, mask, back, terminator);
+ }
+ };
+};
+
+template <bool IS_MAX>
+inline RT_API_ATTRS void TypedPartialMaxOrMinLoc(const char *intrinsic,
+ Descriptor &result, const Descriptor &x, int kind, int dim,
+ const char *source, int line, const Descriptor *mask, bool back) {
+ Terminator terminator{source, line};
+ CheckIntegerKind(terminator, kind, intrinsic);
+ auto catKind{x.type().GetCategoryAndKind()};
+ RUNTIME_CHECK(terminator, catKind.has_value());
+ const Descriptor *maskToUse{mask};
+ SubscriptValue maskAt[maxRank]; // contents unused
+ if (mask && mask->rank() == 0) {
+ if (IsLogicalElementTrue(*mask, maskAt)) {
+ // A scalar MASK that's .TRUE. In this case, just get rid of the MASK.
+ maskToUse = nullptr;
+ } else {
+ // For scalar MASK arguments that are .FALSE., return all zeroes
+
+ // Element size of the destination descriptor is the size
+ // of {TypeCategory::Integer, kind}.
+ CreatePartialReductionResult(result, x,
+ Descriptor::BytesFor(TypeCategory::Integer, kind), dim, terminator,
+ intrinsic, TypeCode{TypeCategory::Integer, kind});
+ std::memset(
+ result.OffsetElement(), 0, result.Elements() * result.ElementBytes());
+ return;
+ }
+ }
+ switch (catKind->first) {
+ case TypeCategory::Integer:
+ ApplyIntegerKind<DoPartialMaxOrMinLocHelper<TypeCategory::Integer, IS_MAX,
+ NumericCompare>::template Functor,
+ void>(catKind->second, terminator, intrinsic, result, x, kind, dim,
+ maskToUse, back, terminator);
+ break;
+ case TypeCategory::Unsigned:
+ ApplyIntegerKind<DoPartialMaxOrMinLocHelper<TypeCategory::Unsigned, IS_MAX,
+ NumericCompare>::template Functor,
+ void>(catKind->second, terminator, intrinsic, result, x, kind, dim,
+ maskToUse, back, terminator);
+ break;
+ case TypeCategory::Real:
+ ApplyFloatingPointKind<DoPartialMaxOrMinLocHelper<TypeCategory::Real,
+ IS_MAX, NumericCompare>::template Functor,
+ void>(catKind->second, terminator, intrinsic, result, x, kind, dim,
+ maskToUse, back, terminator);
+ break;
+ case TypeCategory::Character:
+ ApplyCharacterKind<DoPartialMaxOrMinLocHelper<TypeCategory::Character,
+ IS_MAX, CharacterCompare>::template Functor,
+ void>(catKind->second, terminator, intrinsic, result, x, kind, dim,
+ maskToUse, back, terminator);
+ break;
+ default:
+ terminator.Crash(
+ "%s: bad data type code (%d) for array", intrinsic, x.type().raw());
+ }
+}
+
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+void RTDEF(MaxlocDim)(Descriptor &result, const Descriptor &x, int kind,
+ int dim, const char *source, int line, const Descriptor *mask, bool back) {
+ TypedPartialMaxOrMinLoc<true>(
+ "MAXLOC", result, x, kind, dim, source, line, mask, back);
+}
+void RTDEF(MinlocDim)(Descriptor &result, const Descriptor &x, int kind,
+ int dim, const char *source, int line, const Descriptor *mask, bool back) {
+ TypedPartialMaxOrMinLoc<false>(
+ "MINLOC", result, x, kind, dim, source, line, mask, back);
+}
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+
+// MAXVAL and MINVAL
+
+template <TypeCategory CAT, int KIND, bool IS_MAXVAL>
+class NumericExtremumAccumulator {
+public:
+ using Type = CppTypeFor<CAT, KIND>;
+ explicit RT_API_ATTRS NumericExtremumAccumulator(const Descriptor &array)
+ : array_{array} {}
+ RT_API_ATTRS void Reinitialize() {
+ any_ = false;
+ extremum_ = MaxOrMinIdentity<CAT, KIND, IS_MAXVAL>::Value();
+ }
+ template <typename A>
+ RT_API_ATTRS void GetResult(A *p, int /*zeroBasedDim*/ = -1) const {
+ *p = extremum_;
+ }
+ RT_API_ATTRS bool Accumulate(Type x) {
+ if (!any_) {
+ extremum_ = x;
+ any_ = true;
+ } else if (CAT == TypeCategory::Real && extremum_ != extremum_) {
+ extremum_ = x; // replace NaN
+ } else if constexpr (IS_MAXVAL) {
+ if (x > extremum_) {
+ extremum_ = x;
+ }
+ } else if (x < extremum_) {
+ extremum_ = x;
+ }
+ return true;
+ }
+ template <typename A>
+ RT_API_ATTRS bool AccumulateAt(const SubscriptValue at[]) {
+ return Accumulate(*array_.Element<A>(at));
+ }
+
+private:
+ const Descriptor &array_;
+ bool any_{false};
+ Type extremum_{MaxOrMinIdentity<CAT, KIND, IS_MAXVAL>::Value()};
+};
+
+template <TypeCategory CAT, int KIND, bool IS_MAXVAL>
+inline RT_API_ATTRS CppTypeFor<CAT, KIND> TotalNumericMaxOrMin(
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask, const char *intrinsic) {
+ return GetTotalReduction<CAT, KIND>(x, source, line, dim, mask,
+ NumericExtremumAccumulator<CAT, KIND, IS_MAXVAL>{x}, intrinsic);
+}
+
+template <TypeCategory CAT, bool IS_MAXVAL> struct MaxOrMinHelper {
+ template <int KIND> struct Functor {
+ RT_API_ATTRS void operator()(Descriptor &result, const Descriptor &x,
+ int dim, const Descriptor *mask, const char *intrinsic,
+ Terminator &terminator) const {
+ DoMaxMinNorm2<CAT, KIND,
+ NumericExtremumAccumulator<CAT, KIND, IS_MAXVAL>>(
+ result, x, dim, mask, intrinsic, terminator);
+ }
+ };
+};
+
+template <bool IS_MAXVAL>
+inline RT_API_ATTRS void NumericMaxOrMin(Descriptor &result,
+ const Descriptor &x, int dim, const char *source, int line,
+ const Descriptor *mask, const char *intrinsic) {
+ Terminator terminator{source, line};
+ auto type{x.type().GetCategoryAndKind()};
+ RUNTIME_CHECK(terminator, type);
+ switch (type->first) {
+ case TypeCategory::Integer:
+ ApplyIntegerKind<
+ MaxOrMinHelper<TypeCategory::Integer, IS_MAXVAL>::template Functor,
+ void>(
+ type->second, terminator, result, x, dim, mask, intrinsic, terminator);
+ break;
+ case TypeCategory::Unsigned:
+ ApplyIntegerKind<
+ MaxOrMinHelper<TypeCategory::Unsigned, IS_MAXVAL>::template Functor,
+ void>(
+ type->second, terminator, result, x, dim, mask, intrinsic, terminator);
+ break;
+ case TypeCategory::Real:
+ ApplyFloatingPointKind<
+ MaxOrMinHelper<TypeCategory::Real, IS_MAXVAL>::template Functor, void>(
+ type->second, terminator, result, x, dim, mask, intrinsic, terminator);
+ break;
+ default:
+ terminator.Crash("%s: bad type code %d", intrinsic, x.type().raw());
+ }
+}
+
+template <int KIND, bool IS_MAXVAL> class CharacterExtremumAccumulator {
+public:
+ using Type = CppTypeFor<TypeCategory::Character, KIND>;
+ explicit RT_API_ATTRS CharacterExtremumAccumulator(const Descriptor &array)
+ : array_{array}, charLen_{array_.ElementBytes() / KIND} {}
+ RT_API_ATTRS void Reinitialize() { extremum_ = nullptr; }
+ template <typename A>
+ RT_API_ATTRS void GetResult(A *p, int /*zeroBasedDim*/ = -1) const {
+ static_assert(std::is_same_v<A, Type>);
+ std::size_t byteSize{array_.ElementBytes()};
+ if (extremum_) {
+ std::memcpy(p, extremum_, byteSize);
+ } else {
+ // Empty array; fill with character 0 for MAXVAL.
+ // For MINVAL, set all of the bits.
+ std::memset(p, IS_MAXVAL ? 0 : 255, byteSize);
+ }
+ }
+ RT_API_ATTRS bool Accumulate(const Type *x) {
+ if (!extremum_) {
+ extremum_ = x;
+ } else {
+ int cmp{CharacterScalarCompare(x, extremum_, charLen_, charLen_)};
+ if (IS_MAXVAL == (cmp > 0)) {
+ extremum_ = x;
+ }
+ }
+ return true;
+ }
+ template <typename A>
+ RT_API_ATTRS bool AccumulateAt(const SubscriptValue at[]) {
+ return Accumulate(array_.Element<A>(at));
+ }
+
+private:
+ const Descriptor &array_;
+ std::size_t charLen_;
+ const Type *extremum_{nullptr};
+};
+
+template <bool IS_MAXVAL> struct CharacterMaxOrMinHelper {
+ template <int KIND> struct Functor {
+ RT_API_ATTRS void operator()(Descriptor &result, const Descriptor &x,
+ int dim, const Descriptor *mask, const char *intrinsic,
+ Terminator &terminator) const {
+ DoMaxMinNorm2<TypeCategory::Character, KIND,
+ CharacterExtremumAccumulator<KIND, IS_MAXVAL>>(
+ result, x, dim, mask, intrinsic, terminator);
+ }
+ };
+};
+
+template <bool IS_MAXVAL>
+inline RT_API_ATTRS void CharacterMaxOrMin(Descriptor &result,
+ const Descriptor &x, int dim, const char *source, int line,
+ const Descriptor *mask, const char *intrinsic) {
+ Terminator terminator{source, line};
+ auto type{x.type().GetCategoryAndKind()};
+ RUNTIME_CHECK(terminator, type && type->first == TypeCategory::Character);
+ ApplyCharacterKind<CharacterMaxOrMinHelper<IS_MAXVAL>::template Functor,
+ void>(
+ type->second, terminator, result, x, dim, mask, intrinsic, terminator);
+}
+
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+CppTypeFor<TypeCategory::Integer, 1> RTDEF(MaxvalInteger1)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Integer, 1, true>(
+ x, source, line, dim, mask, "MAXVAL");
+}
+CppTypeFor<TypeCategory::Integer, 2> RTDEF(MaxvalInteger2)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Integer, 2, true>(
+ x, source, line, dim, mask, "MAXVAL");
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(MaxvalInteger4)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Integer, 4, true>(
+ x, source, line, dim, mask, "MAXVAL");
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(MaxvalInteger8)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Integer, 8, true>(
+ x, source, line, dim, mask, "MAXVAL");
+}
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDEF(MaxvalInteger16)(
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Integer, 16, true>(
+ x, source, line, dim, mask, "MAXVAL");
+}
+#endif
+
+CppTypeFor<TypeCategory::Unsigned, 1> RTDEF(MaxvalUnsigned1)(
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Unsigned, 1, true>(
+ x, source, line, dim, mask, "MAXVAL");
+}
+CppTypeFor<TypeCategory::Unsigned, 2> RTDEF(MaxvalUnsigned2)(
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Unsigned, 2, true>(
+ x, source, line, dim, mask, "MAXVAL");
+}
+CppTypeFor<TypeCategory::Unsigned, 4> RTDEF(MaxvalUnsigned4)(
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Unsigned, 4, true>(
+ x, source, line, dim, mask, "MAXVAL");
+}
+CppTypeFor<TypeCategory::Unsigned, 8> RTDEF(MaxvalUnsigned8)(
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Unsigned, 8, true>(
+ x, source, line, dim, mask, "MAXVAL");
+}
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Unsigned, 16> RTDEF(MaxvalUnsigned16)(
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Unsigned, 16, true>(
+ x, source, line, dim, mask, "MAXVAL");
+}
+#endif
+
+// TODO: REAL(2 & 3)
+CppTypeFor<TypeCategory::Real, 4> RTDEF(MaxvalReal4)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Real, 4, true>(
+ x, source, line, dim, mask, "MAXVAL");
+}
+CppTypeFor<TypeCategory::Real, 8> RTDEF(MaxvalReal8)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Real, 8, true>(
+ x, source, line, dim, mask, "MAXVAL");
+}
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDEF(MaxvalReal10)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Real, 10, true>(
+ x, source, line, dim, mask, "MAXVAL");
+}
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppTypeFor<TypeCategory::Real, 16> RTDEF(MaxvalReal16)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Real, 16, true>(
+ x, source, line, dim, mask, "MAXVAL");
+}
+#endif
+
+void RTDEF(MaxvalCharacter)(Descriptor &result, const Descriptor &x,
+ const char *source, int line, const Descriptor *mask) {
+ CharacterMaxOrMin<true>(result, x, 0, source, line, mask, "MAXVAL");
+}
+
+CppTypeFor<TypeCategory::Integer, 1> RTDEF(MinvalInteger1)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Integer, 1, false>(
+ x, source, line, dim, mask, "MINVAL");
+}
+CppTypeFor<TypeCategory::Integer, 2> RTDEF(MinvalInteger2)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Integer, 2, false>(
+ x, source, line, dim, mask, "MINVAL");
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(MinvalInteger4)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Integer, 4, false>(
+ x, source, line, dim, mask, "MINVAL");
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(MinvalInteger8)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Integer, 8, false>(
+ x, source, line, dim, mask, "MINVAL");
+}
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDEF(MinvalInteger16)(
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Integer, 16, false>(
+ x, source, line, dim, mask, "MINVAL");
+}
+#endif
+
+CppTypeFor<TypeCategory::Unsigned, 1> RTDEF(MinvalUnsigned1)(
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Unsigned, 1, false>(
+ x, source, line, dim, mask, "MINVAL");
+}
+CppTypeFor<TypeCategory::Unsigned, 2> RTDEF(MinvalUnsigned2)(
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Unsigned, 2, false>(
+ x, source, line, dim, mask, "MINVAL");
+}
+CppTypeFor<TypeCategory::Unsigned, 4> RTDEF(MinvalUnsigned4)(
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Unsigned, 4, false>(
+ x, source, line, dim, mask, "MINVAL");
+}
+CppTypeFor<TypeCategory::Unsigned, 8> RTDEF(MinvalUnsigned8)(
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Unsigned, 8, false>(
+ x, source, line, dim, mask, "MINVAL");
+}
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Unsigned, 16> RTDEF(MinvalUnsigned16)(
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Unsigned, 16, false>(
+ x, source, line, dim, mask, "MINVAL");
+}
+#endif
+
+// TODO: REAL(2 & 3)
+CppTypeFor<TypeCategory::Real, 4> RTDEF(MinvalReal4)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Real, 4, false>(
+ x, source, line, dim, mask, "MINVAL");
+}
+CppTypeFor<TypeCategory::Real, 8> RTDEF(MinvalReal8)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Real, 8, false>(
+ x, source, line, dim, mask, "MINVAL");
+}
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDEF(MinvalReal10)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Real, 10, false>(
+ x, source, line, dim, mask, "MINVAL");
+}
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppTypeFor<TypeCategory::Real, 16> RTDEF(MinvalReal16)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return TotalNumericMaxOrMin<TypeCategory::Real, 16, false>(
+ x, source, line, dim, mask, "MINVAL");
+}
+#endif
+
+void RTDEF(MinvalCharacter)(Descriptor &result, const Descriptor &x,
+ const char *source, int line, const Descriptor *mask) {
+ CharacterMaxOrMin<false>(result, x, 0, source, line, mask, "MINVAL");
+}
+
+void RTDEF(MaxvalDim)(Descriptor &result, const Descriptor &x, int dim,
+ const char *source, int line, const Descriptor *mask) {
+ if (x.type().IsCharacter()) {
+ CharacterMaxOrMin<true>(result, x, dim, source, line, mask, "MAXVAL");
+ } else {
+ NumericMaxOrMin<true>(result, x, dim, source, line, mask, "MAXVAL");
+ }
+}
+void RTDEF(MinvalDim)(Descriptor &result, const Descriptor &x, int dim,
+ const char *source, int line, const Descriptor *mask) {
+ if (x.type().IsCharacter()) {
+ CharacterMaxOrMin<false>(result, x, dim, source, line, mask, "MINVAL");
+ } else {
+ NumericMaxOrMin<false>(result, x, dim, source, line, mask, "MINVAL");
+ }
+}
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+
+// NORM2
+
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+// TODO: REAL(2 & 3)
+CppTypeFor<TypeCategory::Real, 4> RTDEF(Norm2_4)(
+ const Descriptor &x, const char *source, int line, int dim) {
+ return GetTotalReduction<TypeCategory::Real, 4>(
+ x, source, line, dim, nullptr, Norm2Accumulator<4>{x}, "NORM2");
+}
+CppTypeFor<TypeCategory::Real, 8> RTDEF(Norm2_8)(
+ const Descriptor &x, const char *source, int line, int dim) {
+ return GetTotalReduction<TypeCategory::Real, 8>(
+ x, source, line, dim, nullptr, Norm2Accumulator<8>{x}, "NORM2");
+}
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDEF(Norm2_10)(
+ const Descriptor &x, const char *source, int line, int dim) {
+ return GetTotalReduction<TypeCategory::Real, 10>(
+ x, source, line, dim, nullptr, Norm2Accumulator<10>{x}, "NORM2");
+}
+#endif
+
+void RTDEF(Norm2Dim)(Descriptor &result, const Descriptor &x, int dim,
+ const char *source, int line) {
+ Terminator terminator{source, line};
+ auto type{x.type().GetCategoryAndKind()};
+ RUNTIME_CHECK(terminator, type);
+ if (type->first == TypeCategory::Real) {
+ ApplyFloatingPointKind<Norm2Helper, void, true>(
+ type->second, terminator, result, x, dim, nullptr, terminator);
+ } else {
+ terminator.Crash("NORM2: bad type code %d", x.type().raw());
+ }
+}
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/file.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/file.cpp
new file mode 100644
index 00000000000..16e73db4887
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/file.cpp
@@ -0,0 +1,480 @@
+//===-- lib/runtime/file.cpp ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang-rt/runtime/file.h"
+#include "flang-rt/runtime/memory.h"
+#include "flang-rt/runtime/tools.h"
+#include "flang/Runtime/magic-numbers.h"
+#include <algorithm>
+#include <cerrno>
+#include <cstring>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#ifdef _WIN32
+#include "flang/Common/windows-include.h"
+#include <io.h>
+#else
+#include <unistd.h>
+#endif
+
+namespace Fortran::runtime::io {
+
+void OpenFile::set_path(OwningPtr<char> &&path, std::size_t bytes) {
+ path_ = std::move(path);
+ pathLength_ = bytes;
+}
+
+static int openfile_mkstemp(IoErrorHandler &handler) {
+#ifdef _WIN32
+ const unsigned int uUnique{0};
+ // GetTempFileNameA needs a directory name < MAX_PATH-14 characters in length.
+ // https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-gettempfilenamea
+ char tempDirName[MAX_PATH - 14];
+ char tempFileName[MAX_PATH];
+ unsigned long nBufferLength{sizeof(tempDirName)};
+ nBufferLength = ::GetTempPathA(nBufferLength, tempDirName);
+ if (nBufferLength > sizeof(tempDirName) || nBufferLength == 0) {
+ return -1;
+ }
+ if (::GetTempFileNameA(tempDirName, "Fortran", uUnique, tempFileName) == 0) {
+ return -1;
+ }
+ int fd{::_open(tempFileName, _O_CREAT | _O_BINARY | _O_TEMPORARY | _O_RDWR,
+ _S_IREAD | _S_IWRITE)};
+#else
+ char path[]{"/tmp/Fortran-Scratch-XXXXXX"};
+ int fd{::mkstemp(path)};
+#endif
+ if (fd < 0) {
+ handler.SignalErrno();
+ }
+#ifndef _WIN32
+ ::unlink(path);
+#endif
+ return fd;
+}
+
+void OpenFile::Open(OpenStatus status, Fortran::common::optional<Action> action,
+ Position position, IoErrorHandler &handler) {
+ if (fd_ >= 0 &&
+ (status == OpenStatus::Old || status == OpenStatus::Unknown)) {
+ return;
+ }
+ CloseFd(handler);
+ if (status == OpenStatus::Scratch) {
+ if (path_.get()) {
+ handler.SignalError("FILE= must not appear with STATUS='SCRATCH'");
+ path_.reset();
+ }
+ if (!action) {
+ action = Action::ReadWrite;
+ }
+ fd_ = openfile_mkstemp(handler);
+ } else {
+ if (!path_.get()) {
+ handler.SignalError("FILE= is required");
+ return;
+ }
+ int flags{0};
+#ifdef _WIN32
+ // We emit explicit CR+LF line endings and cope with them on input
+ // for formatted files, since we can't yet always know now at OPEN
+ // time whether the file is formatted or not.
+ flags |= O_BINARY;
+#endif
+ if (status != OpenStatus::Old) {
+ flags |= O_CREAT;
+ }
+ if (status == OpenStatus::New) {
+ flags |= O_EXCL;
+ } else if (status == OpenStatus::Replace) {
+ flags |= O_TRUNC;
+ }
+ if (!action) {
+ // Try to open read/write, back off to read-only or even write-only
+ // on failure
+ fd_ = ::open(path_.get(), flags | O_RDWR, 0600);
+ if (fd_ >= 0) {
+ action = Action::ReadWrite;
+ } else {
+ fd_ = ::open(path_.get(), flags | O_RDONLY, 0600);
+ if (fd_ >= 0) {
+ action = Action::Read;
+ } else {
+ action = Action::Write;
+ }
+ }
+ }
+ if (fd_ < 0) {
+ switch (*action) {
+ case Action::Read:
+ flags |= O_RDONLY;
+ break;
+ case Action::Write:
+ flags |= O_WRONLY;
+ break;
+ case Action::ReadWrite:
+ flags |= O_RDWR;
+ break;
+ }
+ fd_ = ::open(path_.get(), flags, 0600);
+ if (fd_ < 0) {
+ handler.SignalErrno();
+ }
+ }
+ }
+ RUNTIME_CHECK(handler, action.has_value());
+ pending_.reset();
+ if (fd_ >= 0 && position == Position::Append && !RawSeekToEnd()) {
+ handler.SignalError(IostatOpenBadAppend);
+ }
+ isTerminal_ = fd_ >= 0 && IsATerminal(fd_);
+ mayRead_ = *action != Action::Write;
+ mayWrite_ = *action != Action::Read;
+ if (status == OpenStatus::Old || status == OpenStatus::Unknown) {
+ knownSize_.reset();
+#ifndef _WIN32
+ struct stat buf;
+ if (fd_ >= 0 && ::fstat(fd_, &buf) == 0) {
+ mayPosition_ = S_ISREG(buf.st_mode);
+ knownSize_ = buf.st_size;
+ }
+#else // TODO: _WIN32
+ mayPosition_ = true;
+#endif
+ } else {
+ knownSize_ = 0;
+ mayPosition_ = true;
+ }
+ openPosition_ = position; // for INQUIRE(POSITION=)
+}
+
+void OpenFile::Predefine(int fd) {
+ fd_ = fd;
+ path_.reset();
+ pathLength_ = 0;
+ position_ = 0;
+ knownSize_.reset();
+ nextId_ = 0;
+ pending_.reset();
+ isTerminal_ = fd == 2 || IsATerminal(fd_);
+ mayRead_ = fd == 0;
+ mayWrite_ = fd != 0;
+ mayPosition_ = false;
+#ifdef _WIN32
+ isWindowsTextFile_ = true;
+#endif
+}
+
+void OpenFile::Close(CloseStatus status, IoErrorHandler &handler) {
+ pending_.reset();
+ knownSize_.reset();
+ switch (status) {
+ case CloseStatus::Keep:
+ break;
+ case CloseStatus::Delete:
+ if (path_.get()) {
+ ::unlink(path_.get());
+ }
+ break;
+ }
+ path_.reset();
+ CloseFd(handler);
+}
+
+std::size_t OpenFile::Read(FileOffset at, char *buffer, std::size_t minBytes,
+ std::size_t maxBytes, IoErrorHandler &handler) {
+ if (maxBytes == 0) {
+ return 0;
+ }
+ CheckOpen(handler);
+ if (!Seek(at, handler)) {
+ return 0;
+ }
+ minBytes = std::min(minBytes, maxBytes);
+ std::size_t got{0};
+ while (got < minBytes) {
+ auto chunk{::read(fd_, buffer + got, maxBytes - got)};
+ if (chunk == 0) {
+ break;
+ } else if (chunk < 0) {
+ auto err{errno};
+ if (err != EAGAIN && err != EWOULDBLOCK && err != EINTR) {
+ handler.SignalError(err);
+ break;
+ }
+ } else {
+ SetPosition(position_ + chunk);
+ got += chunk;
+ }
+ }
+ return got;
+}
+
+std::size_t OpenFile::Write(FileOffset at, const char *buffer,
+ std::size_t bytes, IoErrorHandler &handler) {
+ if (bytes == 0) {
+ return 0;
+ }
+ CheckOpen(handler);
+ if (!Seek(at, handler)) {
+ return 0;
+ }
+ std::size_t put{0};
+ while (put < bytes) {
+ auto chunk{::write(fd_, buffer + put, bytes - put)};
+ if (chunk >= 0) {
+ SetPosition(position_ + chunk);
+ put += chunk;
+ } else {
+ auto err{errno};
+ if (err != EAGAIN && err != EWOULDBLOCK && err != EINTR) {
+ handler.SignalError(err);
+ break;
+ }
+ }
+ }
+ if (knownSize_ && position_ > *knownSize_) {
+ knownSize_ = position_;
+ }
+ return put;
+}
+
+inline static int openfile_ftruncate(int fd, OpenFile::FileOffset at) {
+#ifdef _WIN32
+ return ::_chsize(fd, at);
+#else
+ return ::ftruncate(fd, at);
+#endif
+}
+
+void OpenFile::Truncate(FileOffset at, IoErrorHandler &handler) {
+ CheckOpen(handler);
+ if (!knownSize_ || *knownSize_ != at) {
+ if (openfile_ftruncate(fd_, at) != 0) {
+ handler.SignalErrno();
+ }
+ knownSize_ = at;
+ }
+}
+
+// The operation is performed immediately; the results are saved
+// to be claimed by a later WAIT statement.
+// TODO: True asynchronicity
+int OpenFile::ReadAsynchronously(
+ FileOffset at, char *buffer, std::size_t bytes, IoErrorHandler &handler) {
+ CheckOpen(handler);
+ int iostat{0};
+ for (std::size_t got{0}; got < bytes;) {
+#if _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200809L
+ auto chunk{::pread(fd_, buffer + got, bytes - got, at)};
+#else
+ auto chunk{Seek(at, handler) ? ::read(fd_, buffer + got, bytes - got) : -1};
+#endif
+ if (chunk == 0) {
+ iostat = FORTRAN_RUNTIME_IOSTAT_END;
+ break;
+ }
+ if (chunk < 0) {
+ auto err{errno};
+ if (err != EAGAIN && err != EWOULDBLOCK && err != EINTR) {
+ iostat = err;
+ break;
+ }
+ } else {
+ at += chunk;
+ got += chunk;
+ }
+ }
+ return PendingResult(handler, iostat);
+}
+
+// TODO: True asynchronicity
+int OpenFile::WriteAsynchronously(FileOffset at, const char *buffer,
+ std::size_t bytes, IoErrorHandler &handler) {
+ CheckOpen(handler);
+ int iostat{0};
+ for (std::size_t put{0}; put < bytes;) {
+#if _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200809L
+ auto chunk{::pwrite(fd_, buffer + put, bytes - put, at)};
+#else
+ auto chunk{
+ Seek(at, handler) ? ::write(fd_, buffer + put, bytes - put) : -1};
+#endif
+ if (chunk >= 0) {
+ at += chunk;
+ put += chunk;
+ } else {
+ auto err{errno};
+ if (err != EAGAIN && err != EWOULDBLOCK && err != EINTR) {
+ iostat = err;
+ break;
+ }
+ }
+ }
+ return PendingResult(handler, iostat);
+}
+
+void OpenFile::Wait(int id, IoErrorHandler &handler) {
+ Fortran::common::optional<int> ioStat;
+ Pending *prev{nullptr};
+ for (Pending *p{pending_.get()}; p; p = (prev = p)->next.get()) {
+ if (p->id == id) {
+ ioStat = p->ioStat;
+ if (prev) {
+ prev->next.reset(p->next.release());
+ } else {
+ pending_.reset(p->next.release());
+ }
+ break;
+ }
+ }
+ if (ioStat) {
+ handler.SignalError(*ioStat);
+ }
+}
+
+void OpenFile::WaitAll(IoErrorHandler &handler) {
+ while (true) {
+ int ioStat;
+ if (pending_) {
+ ioStat = pending_->ioStat;
+ pending_.reset(pending_->next.release());
+ } else {
+ return;
+ }
+ handler.SignalError(ioStat);
+ }
+}
+
+Position OpenFile::InquirePosition() const {
+ if (openPosition_) { // from OPEN statement
+ return *openPosition_;
+ } else { // unit has been repositioned since opening
+ if (position_ == knownSize_.value_or(position_ + 1)) {
+ return Position::Append;
+ } else if (position_ == 0 && mayPosition_) {
+ return Position::Rewind;
+ } else {
+ return Position::AsIs; // processor-dependent & no common behavior
+ }
+ }
+}
+
+void OpenFile::CheckOpen(const Terminator &terminator) {
+ RUNTIME_CHECK(terminator, fd_ >= 0);
+}
+
+bool OpenFile::Seek(FileOffset at, IoErrorHandler &handler) {
+ if (at == position_) {
+ return true;
+ } else if (RawSeek(at)) {
+ SetPosition(at);
+ return true;
+ } else {
+ handler.SignalError(IostatCannotReposition);
+ return false;
+ }
+}
+
+bool OpenFile::RawSeek(FileOffset at) {
+#ifdef _LARGEFILE64_SOURCE
+ return ::lseek64(fd_, at, SEEK_SET) == at;
+#else
+ return ::lseek(fd_, at, SEEK_SET) == at;
+#endif
+}
+
+bool OpenFile::RawSeekToEnd() {
+#ifdef _LARGEFILE64_SOURCE
+ std::int64_t at{::lseek64(fd_, 0, SEEK_END)};
+#else
+ std::int64_t at{::lseek(fd_, 0, SEEK_END)};
+#endif
+ if (at >= 0) {
+ knownSize_ = at;
+ return true;
+ } else {
+ return false;
+ }
+}
+
+int OpenFile::PendingResult(const Terminator &terminator, int iostat) {
+ int id{nextId_++};
+ pending_ = New<Pending>{terminator}(id, iostat, std::move(pending_));
+ return id;
+}
+
+void OpenFile::CloseFd(IoErrorHandler &handler) {
+ if (fd_ >= 0) {
+ if (fd_ <= 2) {
+ // don't actually close a standard file descriptor, we might need it
+ } else {
+ if (::close(fd_) != 0) {
+ handler.SignalErrno();
+ }
+ }
+ fd_ = -1;
+ }
+}
+
+#if !defined(RT_DEVICE_COMPILATION)
+bool IsATerminal(int fd) { return ::isatty(fd); }
+
+#if defined(_WIN32) && !defined(F_OK)
+// Access flags are normally defined in unistd.h, which unavailable under
+// Windows. Instead, define the flags as documented at
+// https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/access-waccess
+// On Mingw, io.h does define these same constants - so check whether they
+// already are defined before defining these.
+#define F_OK 00
+#define W_OK 02
+#define R_OK 04
+#endif
+
+bool IsExtant(const char *path) { return ::access(path, F_OK) == 0; }
+bool MayRead(const char *path) { return ::access(path, R_OK) == 0; }
+bool MayWrite(const char *path) { return ::access(path, W_OK) == 0; }
+bool MayReadAndWrite(const char *path) {
+ return ::access(path, R_OK | W_OK) == 0;
+}
+
+std::int64_t SizeInBytes(const char *path) {
+#ifndef _WIN32
+ struct stat buf;
+ if (::stat(path, &buf) == 0) {
+ return buf.st_size;
+ }
+#else // TODO: _WIN32
+#endif
+ // No Fortran compiler signals an error
+ return -1;
+}
+#else // defined(RT_DEVICE_COMPILATION)
+RT_API_ATTRS bool IsATerminal(int fd) {
+ Terminator{__FILE__, __LINE__}.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+RT_API_ATTRS bool IsExtant(const char *path) {
+ Terminator{__FILE__, __LINE__}.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+RT_API_ATTRS bool MayRead(const char *path) {
+ Terminator{__FILE__, __LINE__}.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+RT_API_ATTRS bool MayWrite(const char *path) {
+ Terminator{__FILE__, __LINE__}.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+RT_API_ATTRS bool MayReadAndWrite(const char *path) {
+ Terminator{__FILE__, __LINE__}.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+RT_API_ATTRS std::int64_t SizeInBytes(const char *path) {
+ Terminator{__FILE__, __LINE__}.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+#endif // defined(RT_DEVICE_COMPILATION)
+
+} // namespace Fortran::runtime::io
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/findloc.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/findloc.cpp
new file mode 100644
index 00000000000..5485f4b97bd
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/findloc.cpp
@@ -0,0 +1,362 @@
+//===-- lib/runtime/findloc.cpp ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Implements FINDLOC for all required operand types and shapes and result
+// integer kinds.
+
+#include "flang-rt/runtime/reduction-templates.h"
+#include "flang/Runtime/character.h"
+#include "flang/Runtime/reduction.h"
+#include <cinttypes>
+#include <complex>
+
+namespace Fortran::runtime {
+
+template <TypeCategory CAT1, int KIND1, TypeCategory CAT2, int KIND2>
+struct Equality {
+ using Type1 = CppTypeFor<CAT1, KIND1>;
+ using Type2 = CppTypeFor<CAT2, KIND2>;
+ RT_API_ATTRS bool operator()(const Descriptor &array,
+ const SubscriptValue at[], const Descriptor &target) const {
+ if constexpr (KIND1 >= KIND2) {
+ return *array.Element<Type1>(at) ==
+ static_cast<Type1>(*target.OffsetElement<Type2>());
+ } else {
+ return static_cast<Type2>(*array.Element<Type1>(at)) ==
+ *target.OffsetElement<Type2>();
+ }
+ }
+};
+
+template <int KIND1, int KIND2>
+struct Equality<TypeCategory::Complex, KIND1, TypeCategory::Complex, KIND2> {
+ using Type1 = CppTypeFor<TypeCategory::Complex, KIND1>;
+ using Type2 = CppTypeFor<TypeCategory::Complex, KIND2>;
+ RT_API_ATTRS bool operator()(const Descriptor &array,
+ const SubscriptValue at[], const Descriptor &target) const {
+ const Type1 &xz{*array.Element<Type1>(at)};
+ const Type2 &tz{*target.OffsetElement<Type2>()};
+ return xz.real() == tz.real() && xz.imag() == tz.imag();
+ }
+};
+
+template <int KIND1, TypeCategory CAT2, int KIND2>
+struct Equality<TypeCategory::Complex, KIND1, CAT2, KIND2> {
+ using Type1 = CppTypeFor<TypeCategory::Complex, KIND1>;
+ using Type2 = CppTypeFor<CAT2, KIND2>;
+ RT_API_ATTRS bool operator()(const Descriptor &array,
+ const SubscriptValue at[], const Descriptor &target) const {
+ const Type1 &z{*array.Element<Type1>(at)};
+ return z.imag() == 0 && z.real() == *target.OffsetElement<Type2>();
+ }
+};
+
+template <TypeCategory CAT1, int KIND1, int KIND2>
+struct Equality<CAT1, KIND1, TypeCategory::Complex, KIND2> {
+ using Type1 = CppTypeFor<CAT1, KIND1>;
+ using Type2 = CppTypeFor<TypeCategory::Complex, KIND2>;
+ RT_API_ATTRS bool operator()(const Descriptor &array,
+ const SubscriptValue at[], const Descriptor &target) const {
+ const Type2 &z{*target.OffsetElement<Type2>()};
+ return *array.Element<Type1>(at) == z.real() && z.imag() == 0;
+ }
+};
+
+template <int KIND> struct CharacterEquality {
+ using Type = CppTypeFor<TypeCategory::Character, KIND>;
+ RT_API_ATTRS bool operator()(const Descriptor &array,
+ const SubscriptValue at[], const Descriptor &target) const {
+ return CharacterScalarCompare<Type>(array.Element<Type>(at),
+ target.OffsetElement<Type>(),
+ array.ElementBytes() / static_cast<unsigned>(KIND),
+ target.ElementBytes() / static_cast<unsigned>(KIND)) == 0;
+ }
+};
+
+struct LogicalEquivalence {
+ RT_API_ATTRS bool operator()(const Descriptor &array,
+ const SubscriptValue at[], const Descriptor &target) const {
+ return IsLogicalElementTrue(array, at) ==
+ IsLogicalElementTrue(target, at /*ignored*/);
+ }
+};
+
+template <typename EQUALITY> class LocationAccumulator {
+public:
+ RT_API_ATTRS LocationAccumulator(
+ const Descriptor &array, const Descriptor &target, bool back)
+ : array_{array}, target_{target}, back_{back} {}
+ RT_API_ATTRS void Reinitialize() { gotAnything_ = false; }
+ template <typename A>
+ RT_API_ATTRS void GetResult(A *p, int zeroBasedDim = -1) {
+ if (zeroBasedDim >= 0) {
+ *p = gotAnything_ ? location_[zeroBasedDim] -
+ array_.GetDimension(zeroBasedDim).LowerBound() + 1
+ : 0;
+ } else if (gotAnything_) {
+ for (int j{0}; j < rank_; ++j) {
+ p[j] = location_[j] - array_.GetDimension(j).LowerBound() + 1;
+ }
+ } else {
+ // no unmasked hits? result is all zeroes
+ for (int j{0}; j < rank_; ++j) {
+ p[j] = 0;
+ }
+ }
+ }
+ template <typename IGNORED>
+ RT_API_ATTRS bool AccumulateAt(const SubscriptValue at[]) {
+ if (equality_(array_, at, target_)) {
+ gotAnything_ = true;
+ for (int j{0}; j < rank_; ++j) {
+ location_[j] = at[j];
+ }
+ return back_;
+ } else {
+ return true;
+ }
+ }
+
+private:
+ const Descriptor &array_;
+ const Descriptor &target_;
+ const bool back_{false};
+ const int rank_{array_.rank()};
+ bool gotAnything_{false};
+ SubscriptValue location_[maxRank];
+ const EQUALITY equality_{};
+};
+
+template <TypeCategory XCAT, int XKIND, TypeCategory TARGET_CAT>
+struct TotalNumericFindlocHelper {
+ template <int TARGET_KIND> struct Functor {
+ RT_API_ATTRS void operator()(Descriptor &result, const Descriptor &x,
+ const Descriptor &target, int kind, int dim, const Descriptor *mask,
+ bool back, Terminator &terminator) const {
+ using Eq = Equality<XCAT, XKIND, TARGET_CAT, TARGET_KIND>;
+ using Accumulator = LocationAccumulator<Eq>;
+ Accumulator accumulator{x, target, back};
+ DoTotalReduction<void>(x, dim, mask, accumulator, "FINDLOC", terminator);
+ ApplyIntegerKind<LocationResultHelper<Accumulator>::template Functor,
+ void>(kind, terminator, accumulator, result);
+ }
+ };
+};
+
+template <TypeCategory CAT,
+ template <TypeCategory XCAT, int XKIND, TypeCategory TARGET_CAT>
+ class HELPER>
+struct NumericFindlocHelper {
+ template <int KIND> struct Functor {
+ RT_API_ATTRS void operator()(TypeCategory targetCat, int targetKind,
+ Descriptor &result, const Descriptor &x, const Descriptor &target,
+ int kind, int dim, const Descriptor *mask, bool back,
+ Terminator &terminator) const {
+ switch (targetCat) {
+ case TypeCategory::Integer:
+ case TypeCategory::Unsigned:
+ ApplyIntegerKind<
+ HELPER<CAT, KIND, TypeCategory::Integer>::template Functor, void>(
+ targetKind, terminator, result, x, target, kind, dim, mask, back,
+ terminator);
+ break;
+ case TypeCategory::Real:
+ ApplyFloatingPointKind<
+ HELPER<CAT, KIND, TypeCategory::Real>::template Functor, void>(
+ targetKind, terminator, result, x, target, kind, dim, mask, back,
+ terminator);
+ break;
+ case TypeCategory::Complex:
+ ApplyFloatingPointKind<
+ HELPER<CAT, KIND, TypeCategory::Complex>::template Functor, void>(
+ targetKind, terminator, result, x, target, kind, dim, mask, back,
+ terminator);
+ break;
+ default:
+ terminator.Crash(
+ "FINDLOC: bad target category %d for array category %d",
+ static_cast<int>(targetCat), static_cast<int>(CAT));
+ }
+ }
+ };
+};
+
+template <int KIND> struct CharacterFindlocHelper {
+ RT_API_ATTRS void operator()(Descriptor &result, const Descriptor &x,
+ const Descriptor &target, int kind, const Descriptor *mask, bool back,
+ Terminator &terminator) {
+ using Accumulator = LocationAccumulator<CharacterEquality<KIND>>;
+ Accumulator accumulator{x, target, back};
+ DoTotalReduction<void>(x, 0, mask, accumulator, "FINDLOC", terminator);
+ ApplyIntegerKind<LocationResultHelper<Accumulator>::template Functor, void>(
+ kind, terminator, accumulator, result);
+ }
+};
+
+static RT_API_ATTRS void LogicalFindlocHelper(Descriptor &result,
+ const Descriptor &x, const Descriptor &target, int kind,
+ const Descriptor *mask, bool back, Terminator &terminator) {
+ using Accumulator = LocationAccumulator<LogicalEquivalence>;
+ Accumulator accumulator{x, target, back};
+ DoTotalReduction<void>(x, 0, mask, accumulator, "FINDLOC", terminator);
+ ApplyIntegerKind<LocationResultHelper<Accumulator>::template Functor, void>(
+ kind, terminator, accumulator, result);
+}
+
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+void RTDEF(Findloc)(Descriptor &result, const Descriptor &x,
+ const Descriptor &target, int kind, const char *source, int line,
+ const Descriptor *mask, bool back) {
+ int rank{x.rank()};
+ SubscriptValue extent[1]{rank};
+ result.Establish(TypeCategory::Integer, kind, nullptr, 1, extent,
+ CFI_attribute_allocatable);
+ result.GetDimension(0).SetBounds(1, extent[0]);
+ Terminator terminator{source, line};
+ if (int stat{result.Allocate(kNoAsyncObject)}) {
+ terminator.Crash(
+ "FINDLOC: could not allocate memory for result; STAT=%d", stat);
+ }
+ CheckIntegerKind(terminator, kind, "FINDLOC");
+ auto xType{x.type().GetCategoryAndKind()};
+ auto targetType{target.type().GetCategoryAndKind()};
+ RUNTIME_CHECK(terminator, xType.has_value() && targetType.has_value());
+ switch (xType->first) {
+ case TypeCategory::Integer:
+ case TypeCategory::Unsigned:
+ ApplyIntegerKind<NumericFindlocHelper<TypeCategory::Integer,
+ TotalNumericFindlocHelper>::template Functor,
+ void>(xType->second, terminator, targetType->first, targetType->second,
+ result, x, target, kind, 0, mask, back, terminator);
+ break;
+ case TypeCategory::Real:
+ ApplyFloatingPointKind<NumericFindlocHelper<TypeCategory::Real,
+ TotalNumericFindlocHelper>::template Functor,
+ void>(xType->second, terminator, targetType->first, targetType->second,
+ result, x, target, kind, 0, mask, back, terminator);
+ break;
+ case TypeCategory::Complex:
+ ApplyFloatingPointKind<NumericFindlocHelper<TypeCategory::Complex,
+ TotalNumericFindlocHelper>::template Functor,
+ void>(xType->second, terminator, targetType->first, targetType->second,
+ result, x, target, kind, 0, mask, back, terminator);
+ break;
+ case TypeCategory::Character:
+ RUNTIME_CHECK(terminator,
+ targetType->first == TypeCategory::Character &&
+ targetType->second == xType->second);
+ ApplyCharacterKind<CharacterFindlocHelper, void>(xType->second, terminator,
+ result, x, target, kind, mask, back, terminator);
+ break;
+ case TypeCategory::Logical:
+ RUNTIME_CHECK(terminator, targetType->first == TypeCategory::Logical);
+ LogicalFindlocHelper(result, x, target, kind, mask, back, terminator);
+ break;
+ default:
+ terminator.Crash(
+ "FINDLOC: bad data type code (%d) for array", x.type().raw());
+ }
+}
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+
+// FINDLOC with DIM=
+
+template <TypeCategory XCAT, int XKIND, TypeCategory TARGET_CAT>
+struct PartialNumericFindlocHelper {
+ template <int TARGET_KIND> struct Functor {
+ RT_API_ATTRS void operator()(Descriptor &result, const Descriptor &x,
+ const Descriptor &target, int kind, int dim, const Descriptor *mask,
+ bool back, Terminator &terminator) const {
+ using Eq = Equality<XCAT, XKIND, TARGET_CAT, TARGET_KIND>;
+ using Accumulator = LocationAccumulator<Eq>;
+ Accumulator accumulator{x, target, back};
+ ApplyIntegerKind<PartialLocationHelper<Accumulator>::template Functor,
+ void>(kind, terminator, result, x, dim, mask, terminator, "FINDLOC",
+ accumulator);
+ }
+ };
+};
+
+template <int KIND> struct PartialCharacterFindlocHelper {
+ RT_API_ATTRS void operator()(Descriptor &result, const Descriptor &x,
+ const Descriptor &target, int kind, int dim, const Descriptor *mask,
+ bool back, Terminator &terminator) {
+ using Accumulator = LocationAccumulator<CharacterEquality<KIND>>;
+ Accumulator accumulator{x, target, back};
+ ApplyIntegerKind<PartialLocationHelper<Accumulator>::template Functor,
+ void>(kind, terminator, result, x, dim, mask, terminator, "FINDLOC",
+ accumulator);
+ }
+};
+
+static RT_API_ATTRS void PartialLogicalFindlocHelper(Descriptor &result,
+ const Descriptor &x, const Descriptor &target, int kind, int dim,
+ const Descriptor *mask, bool back, Terminator &terminator) {
+ using Accumulator = LocationAccumulator<LogicalEquivalence>;
+ Accumulator accumulator{x, target, back};
+ ApplyIntegerKind<PartialLocationHelper<Accumulator>::template Functor, void>(
+ kind, terminator, result, x, dim, mask, terminator, "FINDLOC",
+ accumulator);
+}
+
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+void RTDEF(FindlocDim)(Descriptor &result, const Descriptor &x,
+ const Descriptor &target, int kind, int dim, const char *source, int line,
+ const Descriptor *mask, bool back) {
+ Terminator terminator{source, line};
+ CheckIntegerKind(terminator, kind, "FINDLOC");
+ auto xType{x.type().GetCategoryAndKind()};
+ auto targetType{target.type().GetCategoryAndKind()};
+ RUNTIME_CHECK(terminator, xType.has_value() && targetType.has_value());
+ switch (xType->first) {
+ case TypeCategory::Integer:
+ case TypeCategory::Unsigned:
+ ApplyIntegerKind<NumericFindlocHelper<TypeCategory::Integer,
+ PartialNumericFindlocHelper>::template Functor,
+ void>(xType->second, terminator, targetType->first, targetType->second,
+ result, x, target, kind, dim, mask, back, terminator);
+ break;
+ case TypeCategory::Real:
+ ApplyFloatingPointKind<NumericFindlocHelper<TypeCategory::Real,
+ PartialNumericFindlocHelper>::template Functor,
+ void>(xType->second, terminator, targetType->first, targetType->second,
+ result, x, target, kind, dim, mask, back, terminator);
+ break;
+ case TypeCategory::Complex:
+ ApplyFloatingPointKind<NumericFindlocHelper<TypeCategory::Complex,
+ PartialNumericFindlocHelper>::template Functor,
+ void>(xType->second, terminator, targetType->first, targetType->second,
+ result, x, target, kind, dim, mask, back, terminator);
+ break;
+ case TypeCategory::Character:
+ RUNTIME_CHECK(terminator,
+ targetType->first == TypeCategory::Character &&
+ targetType->second == xType->second);
+ ApplyCharacterKind<PartialCharacterFindlocHelper, void>(xType->second,
+ terminator, result, x, target, kind, dim, mask, back, terminator);
+ break;
+ case TypeCategory::Logical:
+ RUNTIME_CHECK(terminator, targetType->first == TypeCategory::Logical);
+ PartialLogicalFindlocHelper(
+ result, x, target, kind, dim, mask, back, terminator);
+ break;
+ default:
+ terminator.Crash(
+ "FINDLOC: bad data type code (%d) for array", x.type().raw());
+ }
+}
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/format.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/format.cpp
new file mode 100644
index 00000000000..ee0059f5f07
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/format.cpp
@@ -0,0 +1,24 @@
+//===-- lib/runtime/format.cpp ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang-rt/runtime/format-implementation.h"
+
+namespace Fortran::runtime::io {
+RT_OFFLOAD_API_GROUP_BEGIN
+template class FormatControl<
+ InternalFormattedIoStatementState<Direction::Output>>;
+template class FormatControl<
+ InternalFormattedIoStatementState<Direction::Input>>;
+template class FormatControl<
+ ExternalFormattedIoStatementState<Direction::Output>>;
+template class FormatControl<
+ ExternalFormattedIoStatementState<Direction::Input>>;
+template class FormatControl<ChildFormattedIoStatementState<Direction::Output>>;
+template class FormatControl<ChildFormattedIoStatementState<Direction::Input>>;
+RT_OFFLOAD_API_GROUP_END
+} // namespace Fortran::runtime::io
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/inquiry.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/inquiry.cpp
new file mode 100644
index 00000000000..b6a7fce7a1e
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/inquiry.cpp
@@ -0,0 +1,97 @@
+//===-- lib/runtime/inquiry.cpp ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Implements the inquiry intrinsic functions of Fortran 2018 that
+// inquire about shape information of arrays -- LBOUND and SIZE.
+
+#include "flang/Runtime/inquiry.h"
+#include "copy.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+#include <algorithm>
+
+namespace Fortran::runtime {
+
+template <int KIND> struct RawStoreIntegerAt {
+ RT_API_ATTRS void operator()(
+ void *contiguousIntegerArray, std::size_t at, std::int64_t value) const {
+ reinterpret_cast<Fortran::runtime::CppTypeFor<
+ Fortran::common::TypeCategory::Integer, KIND> *>(
+ contiguousIntegerArray)[at] = value;
+ }
+};
+
+extern "C" {
+std::int64_t RTDEF(LboundDim)(
+ const Descriptor &array, int dim, const char *sourceFile, int line) {
+ if (dim < 1 || dim > array.rank()) {
+ Terminator terminator{sourceFile, line};
+ terminator.Crash(
+ "SIZE: bad DIM=%d for ARRAY with rank=%d", dim, array.rank());
+ }
+ const Dimension &dimension{array.GetDimension(dim - 1)};
+ return static_cast<std::int64_t>(dimension.LowerBound());
+}
+
+void RTDEF(Ubound)(void *result, const Descriptor &array, int kind,
+ const char *sourceFile, int line) {
+ Terminator terminator{sourceFile, line};
+ INTERNAL_CHECK(array.rank() <= common::maxRank);
+ for (SubscriptValue i{0}; i < array.rank(); ++i) {
+ const Dimension &dimension{array.GetDimension(i)};
+ Fortran::runtime::ApplyIntegerKind<RawStoreIntegerAt, void>(
+ kind, terminator, result, i, dimension.UpperBound());
+ }
+}
+
+std::int64_t RTDEF(Size)(
+ const Descriptor &array, const char *sourceFile, int line) {
+ std::int64_t result{1};
+ for (int i = 0; i < array.rank(); ++i) {
+ const Dimension &dimension{array.GetDimension(i)};
+ result *= dimension.Extent();
+ }
+ return result;
+}
+
+std::int64_t RTDEF(SizeDim)(
+ const Descriptor &array, int dim, const char *sourceFile, int line) {
+ if (dim < 1 || dim > array.rank()) {
+ Terminator terminator{sourceFile, line};
+ terminator.Crash(
+ "SIZE: bad DIM=%d for ARRAY with rank=%d", dim, array.rank());
+ }
+ const Dimension &dimension{array.GetDimension(dim - 1)};
+ return static_cast<std::int64_t>(dimension.Extent());
+}
+
+void RTDEF(Shape)(void *result, const Descriptor &array, int kind,
+ const char *sourceFile, int line) {
+ Terminator terminator{sourceFile, line};
+ INTERNAL_CHECK(array.rank() <= common::maxRank);
+ for (SubscriptValue i{0}; i < array.rank(); ++i) {
+ const Dimension &dimension{array.GetDimension(i)};
+ Fortran::runtime::ApplyIntegerKind<RawStoreIntegerAt, void>(
+ kind, terminator, result, i, dimension.Extent());
+ }
+}
+
+void RTDEF(Lbound)(void *result, const Descriptor &array, int kind,
+ const char *sourceFile, int line) {
+ Terminator terminator{sourceFile, line};
+ INTERNAL_CHECK(array.rank() <= common::maxRank);
+ for (SubscriptValue i{0}; i < array.rank(); ++i) {
+ const Dimension &dimension{array.GetDimension(i)};
+ Fortran::runtime::ApplyIntegerKind<RawStoreIntegerAt, void>(
+ kind, terminator, result, i, dimension.LowerBound());
+ }
+}
+
+} // extern "C"
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/internal-unit.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/internal-unit.cpp
new file mode 100644
index 00000000000..e344b01e8b3
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/internal-unit.cpp
@@ -0,0 +1,192 @@
+//===-- lib/runtime/internal-unit.cpp ---------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang-rt/runtime/internal-unit.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/io-error.h"
+#include "flang/Runtime/freestanding-tools.h"
+#include <algorithm>
+#include <type_traits>
+
+namespace Fortran::runtime::io {
+RT_OFFLOAD_API_GROUP_BEGIN
+
+template <Direction DIR>
+RT_API_ATTRS InternalDescriptorUnit<DIR>::InternalDescriptorUnit(
+ Scalar scalar, std::size_t length, int kind) {
+ internalIoCharKind = kind;
+ recordLength = length;
+ endfileRecordNumber = 2;
+ void *pointer{reinterpret_cast<void *>(const_cast<char *>(scalar))};
+ descriptor().Establish(TypeCode{TypeCategory::Character, kind}, length * kind,
+ pointer, 0, nullptr, CFI_attribute_pointer);
+}
+
+template <Direction DIR>
+RT_API_ATTRS InternalDescriptorUnit<DIR>::InternalDescriptorUnit(
+ const Descriptor &that, const Terminator &terminator) {
+ auto thatType{that.type().GetCategoryAndKind()};
+ RUNTIME_CHECK(terminator, thatType.has_value());
+ RUNTIME_CHECK(terminator, thatType->first == TypeCategory::Character);
+ Descriptor &d{descriptor()};
+ RUNTIME_CHECK(
+ terminator, that.SizeInBytes() <= d.SizeInBytes(maxRank, true, 0));
+ RUNTIME_CHECK(terminator,
+ that.SizeInBytes() <= MaxDescriptorSizeInBytes(maxRank, true, 0));
+ new (&d) Descriptor{that};
+ d.Check();
+ internalIoCharKind = thatType->second;
+ recordLength = d.ElementBytes();
+ endfileRecordNumber = d.Elements() + 1;
+}
+
+template <Direction DIR>
+RT_API_ATTRS bool InternalDescriptorUnit<DIR>::Emit(
+ const char *data, std::size_t bytes, IoErrorHandler &handler) {
+ if constexpr (DIR == Direction::Input) {
+ handler.Crash("InternalDescriptorUnit<Direction::Input>::Emit() called");
+ return false && data[bytes] != 0; // bogus compare silences GCC warning
+ } else {
+ if (bytes <= 0) {
+ return true;
+ }
+ char *record{CurrentRecord()};
+ if (!record) {
+ handler.SignalError(IostatInternalWriteOverrun);
+ return false;
+ }
+ auto furthestAfter{std::max(furthestPositionInRecord,
+ positionInRecord + static_cast<std::int64_t>(bytes))};
+ bool ok{true};
+ if (furthestAfter > static_cast<std::int64_t>(recordLength.value_or(0))) {
+ handler.SignalError(IostatRecordWriteOverrun);
+ furthestAfter = recordLength.value_or(0);
+ bytes = std::max(std::int64_t{0}, furthestAfter - positionInRecord);
+ ok = false;
+ } else if (positionInRecord > furthestPositionInRecord) {
+ BlankFill(record + furthestPositionInRecord,
+ positionInRecord - furthestPositionInRecord);
+ }
+ std::memcpy(record + positionInRecord, data, bytes);
+ positionInRecord += bytes;
+ furthestPositionInRecord = furthestAfter;
+ return ok;
+ }
+}
+
+template <Direction DIR>
+RT_API_ATTRS std::size_t InternalDescriptorUnit<DIR>::GetNextInputBytes(
+ const char *&p, IoErrorHandler &handler) {
+ p = nullptr;
+ if constexpr (DIR == Direction::Output) {
+ handler.Crash("InternalDescriptorUnit<Direction::Output>::"
+ "GetNextInputBytes() called");
+ return 0;
+ } else {
+ const char *record{CurrentRecord()};
+ if (!record) {
+ handler.SignalEnd();
+ return 0;
+ } else if (positionInRecord >= recordLength.value_or(positionInRecord)) {
+ return 0;
+ } else {
+ p = &record[positionInRecord];
+ return *recordLength - positionInRecord;
+ }
+ }
+}
+
+template <Direction DIR>
+RT_API_ATTRS std::size_t InternalDescriptorUnit<DIR>::ViewBytesInRecord(
+ const char *&p, bool forward) const {
+ p = nullptr;
+ auto recl{recordLength.value_or(positionInRecord)};
+ const char *record{CurrentRecord()};
+ if (forward) {
+ if (positionInRecord < recl) {
+ if (record) {
+ p = &record[positionInRecord];
+ }
+ return recl - positionInRecord;
+ }
+ } else {
+ if (record && positionInRecord <= recl) {
+ p = &record[positionInRecord];
+ }
+ return positionInRecord - leftTabLimit.value_or(0);
+ }
+ return 0;
+}
+
+template <Direction DIR>
+RT_API_ATTRS bool InternalDescriptorUnit<DIR>::AdvanceRecord(
+ IoErrorHandler &handler) {
+ if (currentRecordNumber >= endfileRecordNumber.value_or(0)) {
+ if constexpr (DIR == Direction::Input) {
+ handler.SignalEnd();
+ } else {
+ handler.SignalError(IostatInternalWriteOverrun);
+ }
+ return false;
+ }
+ if constexpr (DIR == Direction::Output) {
+ BlankFillOutputRecord();
+ }
+ ++currentRecordNumber;
+ BeginRecord();
+ return true;
+}
+
+template <Direction DIR>
+RT_API_ATTRS void InternalDescriptorUnit<DIR>::BlankFill(
+ char *at, std::size_t bytes) {
+ switch (internalIoCharKind) {
+ case 2:
+ Fortran::runtime::fill_n(reinterpret_cast<char16_t *>(at), bytes / 2,
+ static_cast<char16_t>(' '));
+ break;
+ case 4:
+ Fortran::runtime::fill_n(reinterpret_cast<char32_t *>(at), bytes / 4,
+ static_cast<char32_t>(' '));
+ break;
+ default:
+ Fortran::runtime::fill_n(at, bytes, ' ');
+ break;
+ }
+}
+
+template <Direction DIR>
+RT_API_ATTRS void InternalDescriptorUnit<DIR>::BlankFillOutputRecord() {
+ if constexpr (DIR == Direction::Output) {
+ if (furthestPositionInRecord <
+ recordLength.value_or(furthestPositionInRecord)) {
+ BlankFill(CurrentRecord() + furthestPositionInRecord,
+ *recordLength - furthestPositionInRecord);
+ }
+ }
+}
+
+template <Direction DIR>
+RT_API_ATTRS void InternalDescriptorUnit<DIR>::BackspaceRecord(
+ IoErrorHandler &handler) {
+ RUNTIME_CHECK(handler, currentRecordNumber > 1);
+ --currentRecordNumber;
+ BeginRecord();
+}
+
+template <Direction DIR>
+RT_API_ATTRS std::int64_t InternalDescriptorUnit<DIR>::InquirePos() {
+ return (currentRecordNumber - 1) * recordLength.value_or(0) +
+ positionInRecord + 1;
+}
+
+template class InternalDescriptorUnit<Direction::Output>;
+template class InternalDescriptorUnit<Direction::Input>;
+
+RT_OFFLOAD_API_GROUP_END
+} // namespace Fortran::runtime::io
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/io-api-common.h b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/io-api-common.h
new file mode 100644
index 00000000000..b91ff9ff168
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/io-api-common.h
@@ -0,0 +1,97 @@
+//===-- lib/runtime/io-api-common.h -----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FLANG_RT_RUNTIME_IO_API_COMMON_H_
+#define FLANG_RT_RUNTIME_IO_API_COMMON_H_
+
+#include "unit.h"
+#include "flang-rt/runtime/io-stmt.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang/Common/api-attrs.h"
+#include "flang/Common/optional.h"
+#include "flang/Runtime/io-api.h"
+
+namespace Fortran::runtime::io {
+
+static inline RT_API_ATTRS Cookie NoopUnit(const Terminator &terminator,
+ int unitNumber, enum Iostat iostat = IostatOk) {
+ Cookie cookie{&New<NoopStatementState>{terminator}(
+ terminator.sourceFileName(), terminator.sourceLine(), unitNumber)
+ .release()
+ ->ioStatementState()};
+ if (iostat != IostatOk) {
+ cookie->GetIoErrorHandler().SetPendingError(iostat);
+ }
+ return cookie;
+}
+
+static inline RT_API_ATTRS ExternalFileUnit *GetOrCreateUnit(int unitNumber,
+ Direction direction, Fortran::common::optional<bool> isUnformatted,
+ const Terminator &terminator, Cookie &errorCookie) {
+ IoErrorHandler handler{terminator};
+ handler.HasIoStat();
+ if (ExternalFileUnit *
+ unit{ExternalFileUnit::LookUpOrCreateAnonymous(
+ unitNumber, direction, isUnformatted, handler)}) {
+ errorCookie = nullptr;
+ return unit;
+ } else {
+ auto iostat{static_cast<enum Iostat>(handler.GetIoStat())};
+ errorCookie = NoopUnit(terminator, unitNumber,
+ iostat != IostatOk ? iostat : IostatBadUnitNumber);
+ return nullptr;
+ }
+}
+
+template <Direction DIR, template <Direction> class STATE, typename... A>
+RT_API_ATTRS Cookie BeginExternalListIO(
+ int unitNumber, const char *sourceFile, int sourceLine, A &&...xs) {
+ Terminator terminator{sourceFile, sourceLine};
+ Cookie errorCookie{nullptr};
+ ExternalFileUnit *unit{GetOrCreateUnit(
+ unitNumber, DIR, false /*!unformatted*/, terminator, errorCookie)};
+ if (!unit) {
+ return errorCookie;
+ }
+ if (!unit->isUnformatted.has_value()) {
+ unit->isUnformatted = false;
+ }
+ Iostat iostat{IostatOk};
+ if (*unit->isUnformatted) {
+ iostat = IostatFormattedIoOnUnformattedUnit;
+ }
+ if (ChildIo * child{unit->GetChildIo()}) {
+ if (iostat == IostatOk) {
+ iostat = child->CheckFormattingAndDirection(false, DIR);
+ }
+ if (iostat == IostatOk) {
+ return &child->BeginIoStatement<ChildListIoStatementState<DIR>>(
+ *child, sourceFile, sourceLine);
+ } else {
+ return &child->BeginIoStatement<ErroneousIoStatementState>(
+ iostat, nullptr /* no unit */, sourceFile, sourceLine);
+ }
+ } else {
+ if (iostat == IostatOk && unit->access == Access::Direct) {
+ iostat = IostatListIoOnDirectAccessUnit;
+ }
+ if (iostat == IostatOk) {
+ iostat = unit->SetDirection(DIR);
+ }
+ if (iostat == IostatOk) {
+ return &unit->BeginIoStatement<STATE<DIR>>(
+ terminator, std::forward<A>(xs)..., *unit, sourceFile, sourceLine);
+ } else {
+ return &unit->BeginIoStatement<ErroneousIoStatementState>(
+ terminator, iostat, unit, sourceFile, sourceLine);
+ }
+ }
+}
+
+} // namespace Fortran::runtime::io
+#endif // FLANG_RT_RUNTIME_IO_API_COMMON_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/io-api-minimal.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/io-api-minimal.cpp
new file mode 100644
index 00000000000..fdf7183ed51
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/io-api-minimal.cpp
@@ -0,0 +1,164 @@
+//===-- lib/runtime/io-api-minimal.cpp --------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Implements the subset of the I/O statement API needed for basic
+// list-directed output (PRINT *) of intrinsic types.
+
+#include "edit-output.h"
+#include "io-api-common.h"
+#include "unit.h"
+#include "flang-rt/runtime/format.h"
+#include "flang-rt/runtime/io-stmt.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+#include "flang/Runtime/io-api.h"
+
+namespace Fortran::runtime::io {
+RT_EXT_API_GROUP_BEGIN
+
+Cookie IODEF(BeginExternalListOutput)(
+ ExternalUnit unitNumber, const char *sourceFile, int sourceLine) {
+ return BeginExternalListIO<Direction::Output, ExternalListIoStatementState>(
+ unitNumber, sourceFile, sourceLine);
+}
+
+enum Iostat IODEF(EndIoStatement)(Cookie cookie) {
+ IoStatementState &io{*cookie};
+ return static_cast<enum Iostat>(io.EndIoStatement());
+}
+
+template <int KIND, typename INT = CppTypeFor<TypeCategory::Integer, KIND>>
+inline RT_API_ATTRS bool FormattedScalarIntegerOutput(
+ IoStatementState &io, INT x, const char *whence) {
+ if (io.CheckFormattedStmtType<Direction::Output>(whence)) {
+ auto edit{io.GetNextDataEdit()};
+ return edit && EditIntegerOutput<KIND>(io, *edit, x, /*isSigned=*/true);
+ } else {
+ return false;
+ }
+}
+
+bool IODEF(OutputInteger8)(Cookie cookie, std::int8_t n) {
+ return FormattedScalarIntegerOutput<1>(*cookie, n, "OutputInteger8");
+}
+
+bool IODEF(OutputInteger16)(Cookie cookie, std::int16_t n) {
+ return FormattedScalarIntegerOutput<2>(*cookie, n, "OutputInteger16");
+}
+
+bool IODEF(OutputInteger32)(Cookie cookie, std::int32_t n) {
+ return FormattedScalarIntegerOutput<4>(*cookie, n, "OutputInteger32");
+}
+
+bool IODEF(OutputInteger64)(Cookie cookie, std::int64_t n) {
+ return FormattedScalarIntegerOutput<8>(*cookie, n, "OutputInteger64");
+}
+
+#ifdef __SIZEOF_INT128__
+bool IODEF(OutputInteger128)(Cookie cookie, common::int128_t n) {
+ return FormattedScalarIntegerOutput<16>(*cookie, n, "OutputInteger128");
+}
+#endif
+
+template <int KIND,
+ typename REAL = typename RealOutputEditing<KIND>::BinaryFloatingPoint>
+inline RT_API_ATTRS bool FormattedScalarRealOutput(
+ IoStatementState &io, REAL x, const char *whence) {
+ if (io.CheckFormattedStmtType<Direction::Output>(whence)) {
+ auto edit{io.GetNextDataEdit()};
+ return edit && RealOutputEditing<KIND>{io, x}.Edit(*edit);
+ } else {
+ return false;
+ }
+}
+
+bool IODEF(OutputReal32)(Cookie cookie, float x) {
+ return FormattedScalarRealOutput<4>(*cookie, x, "OutputReal32");
+}
+
+bool IODEF(OutputReal64)(Cookie cookie, double x) {
+ return FormattedScalarRealOutput<8>(*cookie, x, "OutputReal64");
+}
+
+template <int KIND,
+ typename REAL = typename RealOutputEditing<KIND>::BinaryFloatingPoint>
+inline RT_API_ATTRS bool FormattedScalarComplexOutput(
+ IoStatementState &io, REAL re, REAL im, const char *whence) {
+ if (io.CheckFormattedStmtType<Direction::Output>(whence)) {
+ if (io.get_if<ListDirectedStatementState<Direction::Output>>() != nullptr) {
+ DataEdit rEdit, iEdit;
+ rEdit.descriptor = DataEdit::ListDirectedRealPart;
+ iEdit.descriptor = DataEdit::ListDirectedImaginaryPart;
+ rEdit.modes = iEdit.modes = io.mutableModes();
+ return RealOutputEditing<KIND>{io, re}.Edit(rEdit) &&
+ RealOutputEditing<KIND>{io, im}.Edit(iEdit);
+ } else {
+ auto reEdit{io.GetNextDataEdit()};
+ if (reEdit && RealOutputEditing<KIND>{io, re}.Edit(*reEdit)) {
+ auto imEdit{io.GetNextDataEdit()};
+ return imEdit && RealOutputEditing<KIND>{io, im}.Edit(*imEdit);
+ }
+ }
+ }
+ return false;
+}
+
+bool IODEF(OutputComplex32)(Cookie cookie, float re, float im) {
+ return FormattedScalarComplexOutput<4>(*cookie, re, im, "OutputComplex32");
+}
+
+bool IODEF(OutputComplex64)(Cookie cookie, double re, double im) {
+ return FormattedScalarComplexOutput<8>(*cookie, re, im, "OutputComplex64");
+}
+
+bool IODEF(OutputAscii)(Cookie cookie, const char *x, std::size_t length) {
+ IoStatementState &io{*cookie};
+ if (!x) {
+ io.GetIoErrorHandler().Crash("Null address for character output item");
+ } else if (auto *listOutput{
+ io.get_if<ListDirectedStatementState<Direction::Output>>()}) {
+ return ListDirectedCharacterOutput(io, *listOutput, x, length);
+ } else if (io.CheckFormattedStmtType<Direction::Output>("OutputAscii")) {
+ auto edit{io.GetNextDataEdit()};
+ return edit && EditCharacterOutput(io, *edit, x, length);
+ } else {
+ return false;
+ }
+}
+
+bool IODEF(OutputLogical)(Cookie cookie, bool truth) {
+ IoStatementState &io{*cookie};
+ if (auto *listOutput{
+ io.get_if<ListDirectedStatementState<Direction::Output>>()}) {
+ return ListDirectedLogicalOutput(io, *listOutput, truth);
+ } else if (io.CheckFormattedStmtType<Direction::Output>("OutputAscii")) {
+ auto edit{io.GetNextDataEdit()};
+ return edit && EditLogicalOutput(io, *edit, truth);
+ } else {
+ return false;
+ }
+}
+
+} // namespace Fortran::runtime::io
+
+#if defined(_LIBCPP_VERBOSE_ABORT)
+// Provide own definition for `std::__libcpp_verbose_abort` to avoid dependency
+// on the version provided by libc++.
+
+void std::__libcpp_verbose_abort(char const *format, ...) noexcept(
+ noexcept(std::__libcpp_verbose_abort(""))) {
+ va_list list;
+ va_start(list, format);
+ std::vfprintf(stderr, format, list);
+ va_end(list);
+
+ std::abort();
+}
+#endif
+
+RT_EXT_API_GROUP_END
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/io-api.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/io-api.cpp
new file mode 100644
index 00000000000..6af0121437c
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/io-api.cpp
@@ -0,0 +1,1303 @@
+//===-- lib/runtime/io-api.cpp ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Implements the I/O statement API
+
+// template function BeginExternalListIo<> is in runtime/io-api-common.h.
+// APIs BeginExternalListOutput, OutputInteger{8,16,32,64,128},
+// OutputReal{32,64}, OutputComplex{32,64}, OutputAscii, & EndIoStatement()
+// are in runtime/io-api-minimal.cpp.
+
+#include "flang/Runtime/io-api.h"
+#include "descriptor-io.h"
+#include "edit-input.h"
+#include "edit-output.h"
+#include "io-api-common.h"
+#include "unit.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/environment.h"
+#include "flang-rt/runtime/format.h"
+#include "flang-rt/runtime/io-stmt.h"
+#include "flang-rt/runtime/memory.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+#include "flang/Common/optional.h"
+#include <cstdlib>
+#include <memory>
+
+namespace Fortran::runtime::io {
+RT_EXT_API_GROUP_BEGIN
+
+template <Direction DIR>
+RT_API_ATTRS Cookie BeginInternalArrayListIO(const Descriptor &descriptor,
+ void ** /*scratchArea*/, std::size_t /*scratchBytes*/,
+ const char *sourceFile, int sourceLine) {
+ Terminator oom{sourceFile, sourceLine};
+ return &New<InternalListIoStatementState<DIR>>{oom}(
+ descriptor, sourceFile, sourceLine)
+ .release()
+ ->ioStatementState();
+}
+
+Cookie IODEF(BeginInternalArrayListOutput)(const Descriptor &descriptor,
+ void **scratchArea, std::size_t scratchBytes, const char *sourceFile,
+ int sourceLine) {
+ return BeginInternalArrayListIO<Direction::Output>(
+ descriptor, scratchArea, scratchBytes, sourceFile, sourceLine);
+}
+
+Cookie IODEF(BeginInternalArrayListInput)(const Descriptor &descriptor,
+ void **scratchArea, std::size_t scratchBytes, const char *sourceFile,
+ int sourceLine) {
+ return BeginInternalArrayListIO<Direction::Input>(
+ descriptor, scratchArea, scratchBytes, sourceFile, sourceLine);
+}
+
+template <Direction DIR>
+RT_API_ATTRS Cookie BeginInternalArrayFormattedIO(const Descriptor &descriptor,
+ const char *format, std::size_t formatLength,
+ const Descriptor *formatDescriptor, void ** /*scratchArea*/,
+ std::size_t /*scratchBytes*/, const char *sourceFile, int sourceLine) {
+ Terminator oom{sourceFile, sourceLine};
+ return &New<InternalFormattedIoStatementState<DIR>>{oom}(descriptor, format,
+ formatLength, formatDescriptor, sourceFile, sourceLine)
+ .release()
+ ->ioStatementState();
+}
+
+Cookie IODEF(BeginInternalArrayFormattedOutput)(const Descriptor &descriptor,
+ const char *format, std::size_t formatLength,
+ const Descriptor *formatDescriptor, void **scratchArea,
+ std::size_t scratchBytes, const char *sourceFile, int sourceLine) {
+ return BeginInternalArrayFormattedIO<Direction::Output>(descriptor, format,
+ formatLength, formatDescriptor, scratchArea, scratchBytes, sourceFile,
+ sourceLine);
+}
+
+Cookie IODEF(BeginInternalArrayFormattedInput)(const Descriptor &descriptor,
+ const char *format, std::size_t formatLength,
+ const Descriptor *formatDescriptor, void **scratchArea,
+ std::size_t scratchBytes, const char *sourceFile, int sourceLine) {
+ return BeginInternalArrayFormattedIO<Direction::Input>(descriptor, format,
+ formatLength, formatDescriptor, scratchArea, scratchBytes, sourceFile,
+ sourceLine);
+}
+
+template <Direction DIR>
+RT_API_ATTRS Cookie BeginInternalListIO(
+ std::conditional_t<DIR == Direction::Input, const char, char> *internal,
+ std::size_t internalLength, void ** /*scratchArea*/,
+ std::size_t /*scratchBytes*/, const char *sourceFile, int sourceLine) {
+ Terminator oom{sourceFile, sourceLine};
+ return &New<InternalListIoStatementState<DIR>>{oom}(
+ internal, internalLength, sourceFile, sourceLine)
+ .release()
+ ->ioStatementState();
+}
+
+Cookie IODEF(BeginInternalListOutput)(char *internal,
+ std::size_t internalLength, void **scratchArea, std::size_t scratchBytes,
+ const char *sourceFile, int sourceLine) {
+ return BeginInternalListIO<Direction::Output>(internal, internalLength,
+ scratchArea, scratchBytes, sourceFile, sourceLine);
+}
+
+Cookie IODEF(BeginInternalListInput)(const char *internal,
+ std::size_t internalLength, void **scratchArea, std::size_t scratchBytes,
+ const char *sourceFile, int sourceLine) {
+ return BeginInternalListIO<Direction::Input>(internal, internalLength,
+ scratchArea, scratchBytes, sourceFile, sourceLine);
+}
+
+template <Direction DIR>
+RT_API_ATTRS Cookie BeginInternalFormattedIO(
+ std::conditional_t<DIR == Direction::Input, const char, char> *internal,
+ std::size_t internalLength, const char *format, std::size_t formatLength,
+ const Descriptor *formatDescriptor, void ** /*scratchArea*/,
+ std::size_t /*scratchBytes*/, const char *sourceFile, int sourceLine) {
+ Terminator oom{sourceFile, sourceLine};
+ return &New<InternalFormattedIoStatementState<DIR>>{oom}(internal,
+ internalLength, format, formatLength, formatDescriptor, sourceFile,
+ sourceLine)
+ .release()
+ ->ioStatementState();
+}
+
+Cookie IODEF(BeginInternalFormattedOutput)(char *internal,
+ std::size_t internalLength, const char *format, std::size_t formatLength,
+ const Descriptor *formatDescriptor, void **scratchArea,
+ std::size_t scratchBytes, const char *sourceFile, int sourceLine) {
+ return BeginInternalFormattedIO<Direction::Output>(internal, internalLength,
+ format, formatLength, formatDescriptor, scratchArea, scratchBytes,
+ sourceFile, sourceLine);
+}
+
+Cookie IODEF(BeginInternalFormattedInput)(const char *internal,
+ std::size_t internalLength, const char *format, std::size_t formatLength,
+ const Descriptor *formatDescriptor, void **scratchArea,
+ std::size_t scratchBytes, const char *sourceFile, int sourceLine) {
+ return BeginInternalFormattedIO<Direction::Input>(internal, internalLength,
+ format, formatLength, formatDescriptor, scratchArea, scratchBytes,
+ sourceFile, sourceLine);
+}
+
+Cookie IODEF(BeginExternalListInput)(
+ ExternalUnit unitNumber, const char *sourceFile, int sourceLine) {
+ return BeginExternalListIO<Direction::Input, ExternalListIoStatementState>(
+ unitNumber, sourceFile, sourceLine);
+}
+
+template <Direction DIR>
+RT_API_ATTRS Cookie BeginExternalFormattedIO(const char *format,
+ std::size_t formatLength, const Descriptor *formatDescriptor,
+ ExternalUnit unitNumber, const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ Cookie errorCookie{nullptr};
+ ExternalFileUnit *unit{GetOrCreateUnit(
+ unitNumber, DIR, false /*!unformatted*/, terminator, errorCookie)};
+ if (!unit) {
+ return errorCookie;
+ }
+ Iostat iostat{IostatOk};
+ if (!unit->isUnformatted.has_value()) {
+ unit->isUnformatted = false;
+ }
+ if (*unit->isUnformatted) {
+ iostat = IostatFormattedIoOnUnformattedUnit;
+ }
+ if (ChildIo * child{unit->GetChildIo()}) {
+ if (iostat == IostatOk) {
+ iostat = child->CheckFormattingAndDirection(false, DIR);
+ }
+ if (iostat == IostatOk) {
+ return &child->BeginIoStatement<ChildFormattedIoStatementState<DIR>>(
+ *child, format, formatLength, formatDescriptor, sourceFile,
+ sourceLine);
+ } else {
+ return &child->BeginIoStatement<ErroneousIoStatementState>(
+ iostat, nullptr /* no unit */, sourceFile, sourceLine);
+ }
+ } else {
+ if (iostat == IostatOk) {
+ iostat = unit->SetDirection(DIR);
+ }
+ if (iostat == IostatOk) {
+ return &unit->BeginIoStatement<ExternalFormattedIoStatementState<DIR>>(
+ terminator, *unit, format, formatLength, formatDescriptor, sourceFile,
+ sourceLine);
+ } else {
+ return &unit->BeginIoStatement<ErroneousIoStatementState>(
+ terminator, iostat, unit, sourceFile, sourceLine);
+ }
+ }
+}
+
+Cookie IODEF(BeginExternalFormattedOutput)(const char *format,
+ std::size_t formatLength, const Descriptor *formatDescriptor,
+ ExternalUnit unitNumber, const char *sourceFile, int sourceLine) {
+ return BeginExternalFormattedIO<Direction::Output>(format, formatLength,
+ formatDescriptor, unitNumber, sourceFile, sourceLine);
+}
+
+Cookie IODEF(BeginExternalFormattedInput)(const char *format,
+ std::size_t formatLength, const Descriptor *formatDescriptor,
+ ExternalUnit unitNumber, const char *sourceFile, int sourceLine) {
+ return BeginExternalFormattedIO<Direction::Input>(format, formatLength,
+ formatDescriptor, unitNumber, sourceFile, sourceLine);
+}
+
+template <Direction DIR>
+RT_API_ATTRS Cookie BeginUnformattedIO(
+ ExternalUnit unitNumber, const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ Cookie errorCookie{nullptr};
+ ExternalFileUnit *unit{GetOrCreateUnit(
+ unitNumber, DIR, true /*unformatted*/, terminator, errorCookie)};
+ if (!unit) {
+ return errorCookie;
+ }
+ Iostat iostat{IostatOk};
+ if (!unit->isUnformatted.has_value()) {
+ unit->isUnformatted = true;
+ }
+ if (!*unit->isUnformatted) {
+ iostat = IostatUnformattedIoOnFormattedUnit;
+ }
+ if (ChildIo * child{unit->GetChildIo()}) {
+ if (iostat == IostatOk) {
+ iostat = child->CheckFormattingAndDirection(true, DIR);
+ }
+ if (iostat == IostatOk) {
+ return &child->BeginIoStatement<ChildUnformattedIoStatementState<DIR>>(
+ *child, sourceFile, sourceLine);
+ } else {
+ return &child->BeginIoStatement<ErroneousIoStatementState>(
+ iostat, nullptr /* no unit */, sourceFile, sourceLine);
+ }
+ } else {
+ if (iostat == IostatOk) {
+ iostat = unit->SetDirection(DIR);
+ }
+ if (iostat == IostatOk) {
+ IoStatementState &io{
+ unit->BeginIoStatement<ExternalUnformattedIoStatementState<DIR>>(
+ terminator, *unit, sourceFile, sourceLine)};
+ if constexpr (DIR == Direction::Output) {
+ if (unit->access == Access::Sequential) {
+ // Create space for (sub)record header to be completed by
+ // ExternalFileUnit::AdvanceRecord()
+ unit->recordLength.reset(); // in case of prior BACKSPACE
+ io.Emit("\0\0\0\0", 4); // placeholder for record length header
+ }
+ }
+ return &io;
+ } else {
+ return &unit->BeginIoStatement<ErroneousIoStatementState>(
+ terminator, iostat, unit, sourceFile, sourceLine);
+ }
+ }
+}
+
+Cookie IODEF(BeginUnformattedOutput)(
+ ExternalUnit unitNumber, const char *sourceFile, int sourceLine) {
+ return BeginUnformattedIO<Direction::Output>(
+ unitNumber, sourceFile, sourceLine);
+}
+
+Cookie IODEF(BeginUnformattedInput)(
+ ExternalUnit unitNumber, const char *sourceFile, int sourceLine) {
+ return BeginUnformattedIO<Direction::Input>(
+ unitNumber, sourceFile, sourceLine);
+}
+
+Cookie IODEF(BeginOpenUnit)( // OPEN(without NEWUNIT=)
+ ExternalUnit unitNumber, const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ bool wasExtant{false};
+ if (ExternalFileUnit *
+ unit{ExternalFileUnit::LookUpOrCreate(
+ unitNumber, terminator, wasExtant)}) {
+ if (ChildIo * child{unit->GetChildIo()}) {
+ return &child->BeginIoStatement<ErroneousIoStatementState>(
+ IostatBadOpOnChildUnit, nullptr /* no unit */, sourceFile,
+ sourceLine);
+ } else {
+ return &unit->BeginIoStatement<OpenStatementState>(terminator, *unit,
+ wasExtant, false /*not NEWUNIT=*/, sourceFile, sourceLine);
+ }
+ } else {
+ return NoopUnit(terminator, unitNumber, IostatBadUnitNumber);
+ }
+}
+
+Cookie IODEF(BeginOpenNewUnit)( // OPEN(NEWUNIT=j)
+ const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ ExternalFileUnit &unit{
+ ExternalFileUnit::NewUnit(terminator, false /*not child I/O*/)};
+ return &unit.BeginIoStatement<OpenStatementState>(terminator, unit,
+ false /*was an existing file*/, true /*NEWUNIT=*/, sourceFile,
+ sourceLine);
+}
+
+Cookie IODEF(BeginWait)(ExternalUnit unitNumber, AsynchronousId id,
+ const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ if (ExternalFileUnit * unit{ExternalFileUnit::LookUp(unitNumber)}) {
+ if (unit->Wait(id)) {
+ return &unit->BeginIoStatement<ExternalMiscIoStatementState>(terminator,
+ *unit, ExternalMiscIoStatementState::Wait, sourceFile, sourceLine);
+ } else {
+ return &unit->BeginIoStatement<ErroneousIoStatementState>(
+ terminator, IostatBadWaitId, unit, sourceFile, sourceLine);
+ }
+ } else {
+ return NoopUnit(
+ terminator, unitNumber, id == 0 ? IostatOk : IostatBadWaitUnit);
+ }
+}
+Cookie IODEF(BeginWaitAll)(
+ ExternalUnit unitNumber, const char *sourceFile, int sourceLine) {
+ return IONAME(BeginWait)(unitNumber, 0 /*no ID=*/, sourceFile, sourceLine);
+}
+
+Cookie IODEF(BeginClose)(
+ ExternalUnit unitNumber, const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ if (ExternalFileUnit * unit{ExternalFileUnit::LookUp(unitNumber)}) {
+ if (ChildIo * child{unit->GetChildIo()}) {
+ return &child->BeginIoStatement<ErroneousIoStatementState>(
+ IostatBadOpOnChildUnit, nullptr /* no unit */, sourceFile,
+ sourceLine);
+ }
+ }
+ if (ExternalFileUnit * unit{ExternalFileUnit::LookUpForClose(unitNumber)}) {
+ return &unit->BeginIoStatement<CloseStatementState>(
+ terminator, *unit, sourceFile, sourceLine);
+ } else {
+ // CLOSE(UNIT=bad unit) is just a no-op
+ return NoopUnit(terminator, unitNumber);
+ }
+}
+
+Cookie IODEF(BeginFlush)(
+ ExternalUnit unitNumber, const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ if (ExternalFileUnit * unit{ExternalFileUnit::LookUp(unitNumber)}) {
+ if (ChildIo * child{unit->GetChildIo()}) {
+ return &child->BeginIoStatement<ExternalMiscIoStatementState>(
+ *unit, ExternalMiscIoStatementState::Flush, sourceFile, sourceLine);
+ } else {
+ return &unit->BeginIoStatement<ExternalMiscIoStatementState>(terminator,
+ *unit, ExternalMiscIoStatementState::Flush, sourceFile, sourceLine);
+ }
+ } else {
+ // FLUSH(UNIT=bad unit) is an error; an unconnected unit is a no-op
+ return NoopUnit(terminator, unitNumber,
+ unitNumber >= 0 ? IostatOk : IostatBadFlushUnit);
+ }
+}
+
+Cookie IODEF(BeginBackspace)(
+ ExternalUnit unitNumber, const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ if (ExternalFileUnit * unit{ExternalFileUnit::LookUp(unitNumber)}) {
+ if (ChildIo * child{unit->GetChildIo()}) {
+ return &child->BeginIoStatement<ErroneousIoStatementState>(
+ IostatBadOpOnChildUnit, nullptr /* no unit */, sourceFile,
+ sourceLine);
+ } else {
+ return &unit->BeginIoStatement<ExternalMiscIoStatementState>(terminator,
+ *unit, ExternalMiscIoStatementState::Backspace, sourceFile,
+ sourceLine);
+ }
+ } else {
+ return NoopUnit(terminator, unitNumber, IostatBadBackspaceUnit);
+ }
+}
+
+Cookie IODEF(BeginEndfile)(
+ ExternalUnit unitNumber, const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ Cookie errorCookie{nullptr};
+ if (ExternalFileUnit *
+ unit{GetOrCreateUnit(unitNumber, Direction::Output,
+ Fortran::common::nullopt, terminator, errorCookie)}) {
+ if (ChildIo * child{unit->GetChildIo()}) {
+ return &child->BeginIoStatement<ErroneousIoStatementState>(
+ IostatBadOpOnChildUnit, nullptr /* no unit */, sourceFile,
+ sourceLine);
+ } else {
+ return &unit->BeginIoStatement<ExternalMiscIoStatementState>(terminator,
+ *unit, ExternalMiscIoStatementState::Endfile, sourceFile, sourceLine);
+ }
+ } else {
+ return errorCookie;
+ }
+}
+
+Cookie IODEF(BeginRewind)(
+ ExternalUnit unitNumber, const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ Cookie errorCookie{nullptr};
+ if (ExternalFileUnit *
+ unit{GetOrCreateUnit(unitNumber, Direction::Input,
+ Fortran::common::nullopt, terminator, errorCookie)}) {
+ if (ChildIo * child{unit->GetChildIo()}) {
+ return &child->BeginIoStatement<ErroneousIoStatementState>(
+ IostatBadOpOnChildUnit, nullptr /* no unit */, sourceFile,
+ sourceLine);
+ } else {
+ return &unit->BeginIoStatement<ExternalMiscIoStatementState>(terminator,
+ *unit, ExternalMiscIoStatementState::Rewind, sourceFile, sourceLine);
+ }
+ } else {
+ return errorCookie;
+ }
+}
+
+Cookie IODEF(BeginInquireUnit)(
+ ExternalUnit unitNumber, const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ if (ExternalFileUnit * unit{ExternalFileUnit::LookUp(unitNumber)}) {
+ if (ChildIo * child{unit->GetChildIo()}) {
+ return &child->BeginIoStatement<InquireUnitState>(
+ *unit, sourceFile, sourceLine);
+ } else {
+ return &unit->BeginIoStatement<InquireUnitState>(
+ terminator, *unit, sourceFile, sourceLine);
+ }
+ } else {
+ // INQUIRE(UNIT=unrecognized unit)
+ return &New<InquireNoUnitState>{terminator}(
+ sourceFile, sourceLine, unitNumber)
+ .release()
+ ->ioStatementState();
+ }
+}
+
+Cookie IODEF(BeginInquireFile)(const char *path, std::size_t pathLength,
+ const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ auto trimmed{SaveDefaultCharacter(
+ path, TrimTrailingSpaces(path, pathLength), terminator)};
+ if (ExternalFileUnit *
+ unit{ExternalFileUnit::LookUp(
+ trimmed.get(), Fortran::runtime::strlen(trimmed.get()))}) {
+ // INQUIRE(FILE=) to a connected unit
+ if (ChildIo * child{unit->GetChildIo()}) {
+ return &child->BeginIoStatement<InquireUnitState>(
+ *unit, sourceFile, sourceLine);
+ } else {
+ return &unit->BeginIoStatement<InquireUnitState>(
+ terminator, *unit, sourceFile, sourceLine);
+ }
+ } else {
+ return &New<InquireUnconnectedFileState>{terminator}(
+ std::move(trimmed), sourceFile, sourceLine)
+ .release()
+ ->ioStatementState();
+ }
+}
+
+Cookie IODEF(BeginInquireIoLength)(const char *sourceFile, int sourceLine) {
+ Terminator oom{sourceFile, sourceLine};
+ return &New<InquireIOLengthState>{oom}(sourceFile, sourceLine)
+ .release()
+ ->ioStatementState();
+}
+
+// Control list items
+
+void IODEF(EnableHandlers)(Cookie cookie, bool hasIoStat, bool hasErr,
+ bool hasEnd, bool hasEor, bool hasIoMsg) {
+ IoErrorHandler &handler{cookie->GetIoErrorHandler()};
+ if (hasIoStat) {
+ handler.HasIoStat();
+ }
+ if (hasErr) {
+ handler.HasErrLabel();
+ }
+ if (hasEnd) {
+ handler.HasEndLabel();
+ }
+ if (hasEor) {
+ handler.HasEorLabel();
+ }
+ if (hasIoMsg) {
+ handler.HasIoMsg();
+ }
+}
+
+static RT_API_ATTRS bool YesOrNo(const char *keyword, std::size_t length,
+ const char *what, IoErrorHandler &handler) {
+ static const char *keywords[]{"YES", "NO", nullptr};
+ switch (IdentifyValue(keyword, length, keywords)) {
+ case 0:
+ return true;
+ case 1:
+ return false;
+ default:
+ handler.SignalError(IostatErrorInKeyword, "Invalid %s='%.*s'", what,
+ static_cast<int>(length), keyword);
+ return false;
+ }
+}
+
+bool IODEF(SetAdvance)(Cookie cookie, const char *keyword, std::size_t length) {
+ IoStatementState &io{*cookie};
+ IoErrorHandler &handler{io.GetIoErrorHandler()};
+ bool nonAdvancing{!YesOrNo(keyword, length, "ADVANCE", handler)};
+ if (nonAdvancing && io.GetConnectionState().access == Access::Direct) {
+ handler.SignalError("Non-advancing I/O attempted on direct access file");
+ } else {
+ auto *unit{io.GetExternalFileUnit()};
+ if (unit && unit->GetChildIo()) {
+ // ADVANCE= is ignored for child I/O (12.6.4.8.3 p3)
+ } else {
+ io.mutableModes().nonAdvancing = nonAdvancing;
+ }
+ }
+ return !handler.InError();
+}
+
+bool IODEF(SetBlank)(Cookie cookie, const char *keyword, std::size_t length) {
+ IoStatementState &io{*cookie};
+ static const char *keywords[]{"NULL", "ZERO", nullptr};
+ switch (IdentifyValue(keyword, length, keywords)) {
+ case 0:
+ io.mutableModes().editingFlags &= ~blankZero;
+ return true;
+ case 1:
+ io.mutableModes().editingFlags |= blankZero;
+ return true;
+ default:
+ io.GetIoErrorHandler().SignalError(IostatErrorInKeyword,
+ "Invalid BLANK='%.*s'", static_cast<int>(length), keyword);
+ return false;
+ }
+}
+
+bool IODEF(SetDecimal)(Cookie cookie, const char *keyword, std::size_t length) {
+ IoStatementState &io{*cookie};
+ static const char *keywords[]{"COMMA", "POINT", nullptr};
+ switch (IdentifyValue(keyword, length, keywords)) {
+ case 0:
+ io.mutableModes().editingFlags |= decimalComma;
+ return true;
+ case 1:
+ io.mutableModes().editingFlags &= ~decimalComma;
+ return true;
+ default:
+ io.GetIoErrorHandler().SignalError(IostatErrorInKeyword,
+ "Invalid DECIMAL='%.*s'", static_cast<int>(length), keyword);
+ return false;
+ }
+}
+
+bool IODEF(SetDelim)(Cookie cookie, const char *keyword, std::size_t length) {
+ IoStatementState &io{*cookie};
+ static const char *keywords[]{"APOSTROPHE", "QUOTE", "NONE", nullptr};
+ switch (IdentifyValue(keyword, length, keywords)) {
+ case 0:
+ io.mutableModes().delim = '\'';
+ return true;
+ case 1:
+ io.mutableModes().delim = '"';
+ return true;
+ case 2:
+ io.mutableModes().delim = '\0';
+ return true;
+ default:
+ io.GetIoErrorHandler().SignalError(IostatErrorInKeyword,
+ "Invalid DELIM='%.*s'", static_cast<int>(length), keyword);
+ return false;
+ }
+}
+
+bool IODEF(SetPad)(Cookie cookie, const char *keyword, std::size_t length) {
+ IoStatementState &io{*cookie};
+ IoErrorHandler &handler{io.GetIoErrorHandler()};
+ io.mutableModes().pad = YesOrNo(keyword, length, "PAD", handler);
+ return !handler.InError();
+}
+
+bool IODEF(SetPos)(Cookie cookie, std::int64_t pos) {
+ IoStatementState &io{*cookie};
+ IoErrorHandler &handler{io.GetIoErrorHandler()};
+ if (auto *unit{io.GetExternalFileUnit()}) {
+ return unit->SetStreamPos(pos, handler);
+ } else if (!io.get_if<ErroneousIoStatementState>()) {
+ handler.Crash("SetPos() called on internal unit");
+ }
+ return false;
+}
+
+bool IODEF(SetRec)(Cookie cookie, std::int64_t rec) {
+ IoStatementState &io{*cookie};
+ IoErrorHandler &handler{io.GetIoErrorHandler()};
+ if (auto *unit{io.GetExternalFileUnit()}) {
+ if (unit->GetChildIo()) {
+ handler.SignalError(
+ IostatBadOpOnChildUnit, "REC= specifier on child I/O");
+ } else {
+ handler.HasRec();
+ unit->SetDirectRec(rec, handler);
+ }
+ } else if (!io.get_if<ErroneousIoStatementState>()) {
+ handler.Crash("SetRec() called on internal unit");
+ }
+ return true;
+}
+
+bool IODEF(SetRound)(Cookie cookie, const char *keyword, std::size_t length) {
+ IoStatementState &io{*cookie};
+ static const char *keywords[]{"UP", "DOWN", "ZERO", "NEAREST", "COMPATIBLE",
+ "PROCESSOR_DEFINED", nullptr};
+ switch (IdentifyValue(keyword, length, keywords)) {
+ case 0:
+ io.mutableModes().round = decimal::RoundUp;
+ return true;
+ case 1:
+ io.mutableModes().round = decimal::RoundDown;
+ return true;
+ case 2:
+ io.mutableModes().round = decimal::RoundToZero;
+ return true;
+ case 3:
+ io.mutableModes().round = decimal::RoundNearest;
+ return true;
+ case 4:
+ io.mutableModes().round = decimal::RoundCompatible;
+ return true;
+ case 5:
+ io.mutableModes().round = executionEnvironment.defaultOutputRoundingMode;
+ return true;
+ default:
+ io.GetIoErrorHandler().SignalError(IostatErrorInKeyword,
+ "Invalid ROUND='%.*s'", static_cast<int>(length), keyword);
+ return false;
+ }
+}
+
+bool IODEF(SetSign)(Cookie cookie, const char *keyword, std::size_t length) {
+ IoStatementState &io{*cookie};
+ static const char *keywords[]{
+ "PLUS", "SUPPRESS", "PROCESSOR_DEFINED", nullptr};
+ switch (IdentifyValue(keyword, length, keywords)) {
+ case 0:
+ io.mutableModes().editingFlags |= signPlus;
+ return true;
+ case 1:
+ case 2: // processor default is SS
+ io.mutableModes().editingFlags &= ~signPlus;
+ return true;
+ default:
+ io.GetIoErrorHandler().SignalError(IostatErrorInKeyword,
+ "Invalid SIGN='%.*s'", static_cast<int>(length), keyword);
+ return false;
+ }
+}
+
+bool IODEF(SetAccess)(Cookie cookie, const char *keyword, std::size_t length) {
+ IoStatementState &io{*cookie};
+ auto *open{io.get_if<OpenStatementState>()};
+ if (!open) {
+ if (!io.get_if<NoopStatementState>() &&
+ !io.get_if<ErroneousIoStatementState>()) {
+ io.GetIoErrorHandler().Crash(
+ "SetAccess() called when not in an OPEN statement");
+ }
+ return false;
+ } else if (open->completedOperation()) {
+ io.GetIoErrorHandler().Crash(
+ "SetAccess() called after GetNewUnit() for an OPEN statement");
+ }
+ static const char *keywords[]{
+ "SEQUENTIAL", "DIRECT", "STREAM", "APPEND", nullptr};
+ switch (IdentifyValue(keyword, length, keywords)) {
+ case 0:
+ open->set_access(Access::Sequential);
+ break;
+ case 1:
+ open->set_access(Access::Direct);
+ break;
+ case 2:
+ open->set_access(Access::Stream);
+ break;
+ case 3: // Sun Fortran extension ACCESS=APPEND: treat as if POSITION=APPEND
+ open->set_position(Position::Append);
+ break;
+ default:
+ open->SignalError(IostatErrorInKeyword, "Invalid ACCESS='%.*s'",
+ static_cast<int>(length), keyword);
+ }
+ return true;
+}
+
+bool IODEF(SetAction)(Cookie cookie, const char *keyword, std::size_t length) {
+ IoStatementState &io{*cookie};
+ auto *open{io.get_if<OpenStatementState>()};
+ if (!open) {
+ if (!io.get_if<NoopStatementState>() &&
+ !io.get_if<ErroneousIoStatementState>()) {
+ io.GetIoErrorHandler().Crash(
+ "SetAction() called when not in an OPEN statement");
+ }
+ return false;
+ } else if (open->completedOperation()) {
+ io.GetIoErrorHandler().Crash(
+ "SetAction() called after GetNewUnit() for an OPEN statement");
+ }
+ Fortran::common::optional<Action> action;
+ static const char *keywords[]{"READ", "WRITE", "READWRITE", nullptr};
+ switch (IdentifyValue(keyword, length, keywords)) {
+ case 0:
+ action = Action::Read;
+ break;
+ case 1:
+ action = Action::Write;
+ break;
+ case 2:
+ action = Action::ReadWrite;
+ break;
+ default:
+ open->SignalError(IostatErrorInKeyword, "Invalid ACTION='%.*s'",
+ static_cast<int>(length), keyword);
+ return false;
+ }
+ RUNTIME_CHECK(io.GetIoErrorHandler(), action.has_value());
+ if (open->wasExtant()) {
+ if ((*action != Action::Write) != open->unit().mayRead() ||
+ (*action != Action::Read) != open->unit().mayWrite()) {
+ open->SignalError("ACTION= may not be changed on an open unit");
+ }
+ }
+ open->set_action(*action);
+ return true;
+}
+
+bool IODEF(SetAsynchronous)(
+ Cookie cookie, const char *keyword, std::size_t length) {
+ IoStatementState &io{*cookie};
+ IoErrorHandler &handler{io.GetIoErrorHandler()};
+ bool isYes{YesOrNo(keyword, length, "ASYNCHRONOUS", handler)};
+ if (auto *open{io.get_if<OpenStatementState>()}) {
+ if (open->completedOperation()) {
+ handler.Crash(
+ "SetAsynchronous() called after GetNewUnit() for an OPEN statement");
+ }
+ open->unit().set_mayAsynchronous(isYes);
+ } else if (!isYes) {
+ // ASYNCHRONOUS='NO' is the default, so this is a no-op
+ } else if (auto *ext{io.get_if<ExternalIoStatementBase>()}) {
+ if (ext->unit().mayAsynchronous()) {
+ ext->SetAsynchronous();
+ } else {
+ handler.SignalError(IostatBadAsynchronous);
+ }
+ } else if (!io.get_if<NoopStatementState>() &&
+ !io.get_if<ErroneousIoStatementState>()) {
+ handler.Crash("SetAsynchronous('YES') called when not in an OPEN or "
+ "external I/O statement");
+ }
+ return !handler.InError();
+}
+
+bool IODEF(SetCarriagecontrol)(
+ Cookie cookie, const char *keyword, std::size_t length) {
+ IoStatementState &io{*cookie};
+ auto *open{io.get_if<OpenStatementState>()};
+ if (!open) {
+ if (!io.get_if<NoopStatementState>() &&
+ !io.get_if<ErroneousIoStatementState>()) {
+ io.GetIoErrorHandler().Crash(
+ "SetCarriageControl() called when not in an OPEN statement");
+ }
+ return false;
+ } else if (open->completedOperation()) {
+ io.GetIoErrorHandler().Crash(
+ "SetCarriageControl() called after GetNewUnit() for an OPEN statement");
+ }
+ static const char *keywords[]{"LIST", "FORTRAN", "NONE", nullptr};
+ switch (IdentifyValue(keyword, length, keywords)) {
+ case 0:
+ return true;
+ case 1:
+ case 2:
+ open->SignalError(IostatErrorInKeyword,
+ "Unimplemented CARRIAGECONTROL='%.*s'", static_cast<int>(length),
+ keyword);
+ return false;
+ default:
+ open->SignalError(IostatErrorInKeyword, "Invalid CARRIAGECONTROL='%.*s'",
+ static_cast<int>(length), keyword);
+ return false;
+ }
+}
+
+bool IODEF(SetConvert)(Cookie cookie, const char *keyword, std::size_t length) {
+ IoStatementState &io{*cookie};
+ auto *open{io.get_if<OpenStatementState>()};
+ if (!open) {
+ if (!io.get_if<NoopStatementState>() &&
+ !io.get_if<ErroneousIoStatementState>()) {
+ io.GetIoErrorHandler().Crash(
+ "SetConvert() called when not in an OPEN statement");
+ }
+ return false;
+ } else if (open->completedOperation()) {
+ io.GetIoErrorHandler().Crash(
+ "SetConvert() called after GetNewUnit() for an OPEN statement");
+ }
+ if (auto convert{GetConvertFromString(keyword, length)}) {
+ open->set_convert(*convert);
+ return true;
+ } else {
+ open->SignalError(IostatErrorInKeyword, "Invalid CONVERT='%.*s'",
+ static_cast<int>(length), keyword);
+ return false;
+ }
+}
+
+bool IODEF(SetEncoding)(
+ Cookie cookie, const char *keyword, std::size_t length) {
+ IoStatementState &io{*cookie};
+ auto *open{io.get_if<OpenStatementState>()};
+ if (!open) {
+ if (!io.get_if<NoopStatementState>() &&
+ !io.get_if<ErroneousIoStatementState>()) {
+ io.GetIoErrorHandler().Crash(
+ "SetEncoding() called when not in an OPEN statement");
+ }
+ return false;
+ } else if (open->completedOperation()) {
+ io.GetIoErrorHandler().Crash(
+ "SetEncoding() called after GetNewUnit() for an OPEN statement");
+ }
+ // Allow the encoding to be changed on an open unit -- it's
+ // useful and safe.
+ static const char *keywords[]{"UTF-8", "DEFAULT", nullptr};
+ switch (IdentifyValue(keyword, length, keywords)) {
+ case 0:
+ open->unit().isUTF8 = true;
+ break;
+ case 1:
+ open->unit().isUTF8 = false;
+ break;
+ default:
+ open->SignalError(IostatErrorInKeyword, "Invalid ENCODING='%.*s'",
+ static_cast<int>(length), keyword);
+ }
+ return true;
+}
+
+bool IODEF(SetForm)(Cookie cookie, const char *keyword, std::size_t length) {
+ IoStatementState &io{*cookie};
+ auto *open{io.get_if<OpenStatementState>()};
+ if (!open) {
+ if (!io.get_if<NoopStatementState>() &&
+ !io.get_if<ErroneousIoStatementState>()) {
+ io.GetIoErrorHandler().Crash(
+ "SetForm() called when not in an OPEN statement");
+ }
+ } else if (open->completedOperation()) {
+ io.GetIoErrorHandler().Crash(
+ "SetForm() called after GetNewUnit() for an OPEN statement");
+ }
+ static const char *keywords[]{"FORMATTED", "UNFORMATTED", "BINARY", nullptr};
+ switch (IdentifyValue(keyword, length, keywords)) {
+ case 0:
+ open->set_isUnformatted(false);
+ break;
+ case 1:
+ open->set_isUnformatted(true);
+ break;
+ case 2: // legacy FORM='BINARY' means an unformatted stream
+ open->set_isUnformatted(true);
+ open->set_access(Access::Stream);
+ break;
+ default:
+ open->SignalError(IostatErrorInKeyword, "Invalid FORM='%.*s'",
+ static_cast<int>(length), keyword);
+ }
+ return true;
+}
+
+bool IODEF(SetPosition)(
+ Cookie cookie, const char *keyword, std::size_t length) {
+ IoStatementState &io{*cookie};
+ auto *open{io.get_if<OpenStatementState>()};
+ if (!open) {
+ if (!io.get_if<NoopStatementState>() &&
+ !io.get_if<ErroneousIoStatementState>()) {
+ io.GetIoErrorHandler().Crash(
+ "SetPosition() called when not in an OPEN statement");
+ }
+ return false;
+ } else if (open->completedOperation()) {
+ io.GetIoErrorHandler().Crash(
+ "SetPosition() called after GetNewUnit() for an OPEN statement");
+ }
+ static const char *positions[]{"ASIS", "REWIND", "APPEND", nullptr};
+ switch (IdentifyValue(keyword, length, positions)) {
+ case 0:
+ open->set_position(Position::AsIs);
+ return true;
+ case 1:
+ open->set_position(Position::Rewind);
+ return true;
+ case 2:
+ open->set_position(Position::Append);
+ return true;
+ default:
+ io.GetIoErrorHandler().SignalError(IostatErrorInKeyword,
+ "Invalid POSITION='%.*s'", static_cast<int>(length), keyword);
+ }
+ return true;
+}
+
+bool IODEF(SetRecl)(Cookie cookie, std::size_t n) {
+ IoStatementState &io{*cookie};
+ auto *open{io.get_if<OpenStatementState>()};
+ if (!open) {
+ if (!io.get_if<NoopStatementState>() &&
+ !io.get_if<ErroneousIoStatementState>()) {
+ io.GetIoErrorHandler().Crash(
+ "SetRecl() called when not in an OPEN statement");
+ }
+ return false;
+ } else if (open->completedOperation()) {
+ io.GetIoErrorHandler().Crash(
+ "SetRecl() called after GetNewUnit() for an OPEN statement");
+ }
+ if (static_cast<std::int64_t>(n) <= 0) {
+ io.GetIoErrorHandler().SignalError("RECL= must be greater than zero");
+ return false;
+ } else if (open->wasExtant() &&
+ open->unit().openRecl.value_or(0) != static_cast<std::int64_t>(n)) {
+ open->SignalError("RECL= may not be changed for an open unit");
+ return false;
+ } else {
+ open->unit().openRecl = n;
+ return true;
+ }
+}
+
+bool IODEF(SetStatus)(Cookie cookie, const char *keyword, std::size_t length) {
+ IoStatementState &io{*cookie};
+ if (auto *open{io.get_if<OpenStatementState>()}) {
+ if (open->completedOperation()) {
+ io.GetIoErrorHandler().Crash(
+ "SetStatus() called after GetNewUnit() for an OPEN statement");
+ }
+ static const char *statuses[]{
+ "OLD", "NEW", "SCRATCH", "REPLACE", "UNKNOWN", nullptr};
+ switch (IdentifyValue(keyword, length, statuses)) {
+ case 0:
+ open->set_status(OpenStatus::Old);
+ return true;
+ case 1:
+ open->set_status(OpenStatus::New);
+ return true;
+ case 2:
+ open->set_status(OpenStatus::Scratch);
+ return true;
+ case 3:
+ open->set_status(OpenStatus::Replace);
+ return true;
+ case 4:
+ open->set_status(OpenStatus::Unknown);
+ return true;
+ default:
+ io.GetIoErrorHandler().SignalError(IostatErrorInKeyword,
+ "Invalid STATUS='%.*s'", static_cast<int>(length), keyword);
+ }
+ return false;
+ }
+ if (auto *close{io.get_if<CloseStatementState>()}) {
+ static const char *statuses[]{"KEEP", "DELETE", nullptr};
+ switch (IdentifyValue(keyword, length, statuses)) {
+ case 0:
+ close->set_status(CloseStatus::Keep);
+ return true;
+ case 1:
+ close->set_status(CloseStatus::Delete);
+ return true;
+ default:
+ io.GetIoErrorHandler().SignalError(IostatErrorInKeyword,
+ "Invalid STATUS='%.*s'", static_cast<int>(length), keyword);
+ }
+ return false;
+ }
+ if (io.get_if<NoopStatementState>() ||
+ io.get_if<ErroneousIoStatementState>()) {
+ return true; // don't bother validating STATUS= in a no-op CLOSE
+ }
+ io.GetIoErrorHandler().Crash(
+ "SetStatus() called when not in an OPEN or CLOSE statement");
+}
+
+bool IODEF(SetFile)(Cookie cookie, const char *path, std::size_t chars) {
+ IoStatementState &io{*cookie};
+ if (auto *open{io.get_if<OpenStatementState>()}) {
+ if (open->completedOperation()) {
+ io.GetIoErrorHandler().Crash(
+ "SetFile() called after GetNewUnit() for an OPEN statement");
+ }
+ open->set_path(path, chars);
+ return true;
+ } else if (!io.get_if<NoopStatementState>() &&
+ !io.get_if<ErroneousIoStatementState>()) {
+ io.GetIoErrorHandler().Crash(
+ "SetFile() called when not in an OPEN statement");
+ }
+ return false;
+}
+
+bool IODEF(GetNewUnit)(Cookie cookie, int &unit, int kind) {
+ IoStatementState &io{*cookie};
+ auto *open{io.get_if<OpenStatementState>()};
+ if (!open) {
+ if (!io.get_if<NoopStatementState>() &&
+ !io.get_if<ErroneousIoStatementState>()) {
+ io.GetIoErrorHandler().Crash(
+ "GetNewUnit() called when not in an OPEN statement");
+ }
+ return false;
+ } else if (!open->InError()) {
+ open->CompleteOperation();
+ }
+ if (open->InError()) {
+ // A failed OPEN(NEWUNIT=n) does not modify 'n'
+ return false;
+ }
+ std::int64_t result{open->unit().unitNumber()};
+ if (!SetInteger(unit, kind, result)) {
+ open->SignalError("GetNewUnit(): bad INTEGER kind(%d) or out-of-range "
+ "value(%jd) for result",
+ kind, static_cast<std::intmax_t>(result));
+ }
+ return true;
+}
+
+// Data transfers
+
+bool IODEF(OutputDescriptor)(Cookie cookie, const Descriptor &descriptor) {
+ return descr::DescriptorIO<Direction::Output>(*cookie, descriptor);
+}
+
+bool IODEF(InputDescriptor)(Cookie cookie, const Descriptor &descriptor) {
+ return descr::DescriptorIO<Direction::Input>(*cookie, descriptor);
+}
+
+bool IODEF(InputInteger)(Cookie cookie, std::int64_t &n, int kind) {
+ IoStatementState &io{*cookie};
+ if (io.BeginReadingRecord()) {
+ if (auto edit{io.GetNextDataEdit()}) {
+ return edit->descriptor == DataEdit::ListDirectedNullValue ||
+ EditIntegerInput(io, *edit, reinterpret_cast<void *>(&n), kind,
+ /*isSigned=*/true);
+ }
+ }
+ return false;
+}
+
+bool IODEF(InputReal32)(Cookie cookie, float &x) {
+ if (!cookie->CheckFormattedStmtType<Direction::Input>("InputReal32")) {
+ return false;
+ }
+ StaticDescriptor<0> staticDescriptor;
+ Descriptor &descriptor{staticDescriptor.descriptor()};
+ descriptor.Establish(TypeCategory::Real, 4, reinterpret_cast<void *>(&x), 0);
+ return descr::DescriptorIO<Direction::Input>(*cookie, descriptor);
+}
+
+bool IODEF(InputReal64)(Cookie cookie, double &x) {
+ if (!cookie->CheckFormattedStmtType<Direction::Input>("InputReal64")) {
+ return false;
+ }
+ StaticDescriptor<0> staticDescriptor;
+ Descriptor &descriptor{staticDescriptor.descriptor()};
+ descriptor.Establish(TypeCategory::Real, 8, reinterpret_cast<void *>(&x), 0);
+ return descr::DescriptorIO<Direction::Input>(*cookie, descriptor);
+}
+
+bool IODEF(InputComplex32)(Cookie cookie, float z[2]) {
+ if (!cookie->CheckFormattedStmtType<Direction::Input>("InputComplex32")) {
+ return false;
+ }
+ StaticDescriptor<0> staticDescriptor;
+ Descriptor &descriptor{staticDescriptor.descriptor()};
+ descriptor.Establish(
+ TypeCategory::Complex, 4, reinterpret_cast<void *>(z), 0);
+ return descr::DescriptorIO<Direction::Input>(*cookie, descriptor);
+}
+
+bool IODEF(InputComplex64)(Cookie cookie, double z[2]) {
+ if (!cookie->CheckFormattedStmtType<Direction::Input>("InputComplex64")) {
+ return false;
+ }
+ StaticDescriptor<0> staticDescriptor;
+ Descriptor &descriptor{staticDescriptor.descriptor()};
+ descriptor.Establish(
+ TypeCategory::Complex, 8, reinterpret_cast<void *>(z), 0);
+ return descr::DescriptorIO<Direction::Input>(*cookie, descriptor);
+}
+
+bool IODEF(OutputCharacter)(
+ Cookie cookie, const char *x, std::size_t length, int kind) {
+ if (!cookie->CheckFormattedStmtType<Direction::Output>("OutputCharacter")) {
+ return false;
+ }
+ StaticDescriptor<0> staticDescriptor;
+ Descriptor &descriptor{staticDescriptor.descriptor()};
+ descriptor.Establish(
+ kind, length, reinterpret_cast<void *>(const_cast<char *>(x)), 0);
+ return descr::DescriptorIO<Direction::Output>(*cookie, descriptor);
+}
+
+bool IODEF(InputCharacter)(
+ Cookie cookie, char *x, std::size_t length, int kind) {
+ if (!cookie->CheckFormattedStmtType<Direction::Input>("InputCharacter")) {
+ return false;
+ }
+ StaticDescriptor<0> staticDescriptor;
+ Descriptor &descriptor{staticDescriptor.descriptor()};
+ descriptor.Establish(kind, length, reinterpret_cast<void *>(x), 0);
+ return descr::DescriptorIO<Direction::Input>(*cookie, descriptor);
+}
+
+bool IODEF(InputAscii)(Cookie cookie, char *x, std::size_t length) {
+ return IONAME(InputCharacter)(cookie, x, length, 1);
+}
+
+bool IODEF(InputLogical)(Cookie cookie, bool &truth) {
+ if (!cookie->CheckFormattedStmtType<Direction::Input>("InputLogical")) {
+ return false;
+ }
+ StaticDescriptor<0> staticDescriptor;
+ Descriptor &descriptor{staticDescriptor.descriptor()};
+ descriptor.Establish(
+ TypeCategory::Logical, sizeof truth, reinterpret_cast<void *>(&truth), 0);
+ return descr::DescriptorIO<Direction::Input>(*cookie, descriptor);
+}
+
+bool IODEF(OutputDerivedType)(Cookie cookie, const Descriptor &descriptor,
+ const NonTbpDefinedIoTable *table) {
+ return descr::DescriptorIO<Direction::Output>(*cookie, descriptor, table);
+}
+
+bool IODEF(InputDerivedType)(Cookie cookie, const Descriptor &descriptor,
+ const NonTbpDefinedIoTable *table) {
+ return descr::DescriptorIO<Direction::Input>(*cookie, descriptor, table);
+}
+
+std::size_t IODEF(GetSize)(Cookie cookie) {
+ IoStatementState &io{*cookie};
+ IoErrorHandler &handler{io.GetIoErrorHandler()};
+ if (!handler.InError()) {
+ io.CompleteOperation();
+ }
+ if (const auto *formatted{
+ io.get_if<FormattedIoStatementState<Direction::Input>>()}) {
+ return formatted->GetEditDescriptorChars();
+ } else if (!io.get_if<NoopStatementState>() &&
+ !io.get_if<ErroneousIoStatementState>()) {
+ handler.Crash("GetIoSize() called for an I/O statement that is not a "
+ "formatted READ()");
+ }
+ return 0;
+}
+
+std::size_t IODEF(GetIoLength)(Cookie cookie) {
+ IoStatementState &io{*cookie};
+ IoErrorHandler &handler{io.GetIoErrorHandler()};
+ if (!handler.InError()) {
+ io.CompleteOperation();
+ }
+ if (const auto *inq{io.get_if<InquireIOLengthState>()}) {
+ return inq->bytes();
+ } else if (!io.get_if<NoopStatementState>() &&
+ !io.get_if<ErroneousIoStatementState>()) {
+ handler.Crash("GetIoLength() called for an I/O statement that is not "
+ "INQUIRE(IOLENGTH=)");
+ }
+ return 0;
+}
+
+void IODEF(GetIoMsg)(Cookie cookie, char *msg, std::size_t length) {
+ IoStatementState &io{*cookie};
+ IoErrorHandler &handler{io.GetIoErrorHandler()};
+ if (!handler.InError()) {
+ io.CompleteOperation();
+ }
+ if (handler.InError()) { // leave "msg" alone when no error
+ handler.GetIoMsg(msg, length);
+ }
+}
+
+AsynchronousId IODEF(GetAsynchronousId)(Cookie cookie) {
+ IoStatementState &io{*cookie};
+ IoErrorHandler &handler{io.GetIoErrorHandler()};
+ if (auto *ext{io.get_if<ExternalIoStatementBase>()}) {
+ return ext->asynchronousID();
+ } else if (!io.get_if<NoopStatementState>() &&
+ !io.get_if<ErroneousIoStatementState>()) {
+ handler.Crash(
+ "GetAsynchronousId() called when not in an external I/O statement");
+ }
+ return 0;
+}
+
+bool IODEF(InquireCharacter)(Cookie cookie, InquiryKeywordHash inquiry,
+ char *result, std::size_t length) {
+ IoStatementState &io{*cookie};
+ return io.Inquire(inquiry, result, length);
+}
+
+bool IODEF(InquireLogical)(
+ Cookie cookie, InquiryKeywordHash inquiry, bool &result) {
+ IoStatementState &io{*cookie};
+ return io.Inquire(inquiry, result);
+}
+
+bool IODEF(InquirePendingId)(Cookie cookie, AsynchronousId id, bool &result) {
+ IoStatementState &io{*cookie};
+ return io.Inquire(HashInquiryKeyword("PENDING"), id, result);
+}
+
+bool IODEF(InquireInteger64)(
+ Cookie cookie, InquiryKeywordHash inquiry, std::int64_t &result, int kind) {
+ IoStatementState &io{*cookie};
+ std::int64_t n{0}; // safe "undefined" value
+ if (io.Inquire(inquiry, n)) {
+ if (SetInteger(result, kind, n)) {
+ return true;
+ }
+ io.GetIoErrorHandler().SignalError(
+ "InquireInteger64(): bad INTEGER kind(%d) or out-of-range "
+ "value(%jd) for result",
+ kind, static_cast<std::intmax_t>(n));
+ }
+ return false;
+}
+
+template <typename INT>
+static RT_API_ATTRS enum Iostat CheckUnitNumberInRangeImpl(INT unit,
+ bool handleError, char *ioMsg, std::size_t ioMsgLength,
+ const char *sourceFile, int sourceLine) {
+ static_assert(sizeof(INT) >= sizeof(ExternalUnit),
+ "only intended to be used when the INT to ExternalUnit conversion is "
+ "narrowing");
+ if (unit != static_cast<ExternalUnit>(unit)) {
+ Terminator oom{sourceFile, sourceLine};
+ IoErrorHandler errorHandler{oom};
+ if (handleError) {
+ errorHandler.HasIoStat();
+ if (ioMsg) {
+ errorHandler.HasIoMsg();
+ }
+ }
+ // Only provide the bad unit number in the message if SignalError can print
+ // it accurately. Otherwise, the generic IostatUnitOverflow message will be
+ // used.
+ if constexpr (sizeof(INT) > sizeof(std::intmax_t)) {
+ errorHandler.SignalError(IostatUnitOverflow);
+ } else if (static_cast<std::intmax_t>(unit) == unit) {
+ errorHandler.SignalError(IostatUnitOverflow,
+ "UNIT number %jd is out of range", static_cast<std::intmax_t>(unit));
+ } else {
+ errorHandler.SignalError(IostatUnitOverflow);
+ }
+ if (ioMsg) {
+ errorHandler.GetIoMsg(ioMsg, ioMsgLength);
+ }
+ return static_cast<enum Iostat>(errorHandler.GetIoStat());
+ }
+ return IostatOk;
+}
+
+enum Iostat IODEF(CheckUnitNumberInRange64)(std::int64_t unit, bool handleError,
+ char *ioMsg, std::size_t ioMsgLength, const char *sourceFile,
+ int sourceLine) {
+ return CheckUnitNumberInRangeImpl(
+ unit, handleError, ioMsg, ioMsgLength, sourceFile, sourceLine);
+}
+
+#ifdef __SIZEOF_INT128__
+enum Iostat IODEF(CheckUnitNumberInRange128)(common::int128_t unit,
+ bool handleError, char *ioMsg, std::size_t ioMsgLength,
+ const char *sourceFile, int sourceLine) {
+ return CheckUnitNumberInRangeImpl(
+ unit, handleError, ioMsg, ioMsgLength, sourceFile, sourceLine);
+}
+#endif
+
+RT_EXT_API_GROUP_END
+} // namespace Fortran::runtime::io
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/io-error.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/io-error.cpp
new file mode 100644
index 00000000000..b350fb66fc2
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/io-error.cpp
@@ -0,0 +1,165 @@
+//===-- lib/runtime/io-error.cpp --------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang-rt/runtime/io-error.h"
+#include "config.h"
+#include "flang-rt/runtime/tools.h"
+#include "flang/Runtime/magic-numbers.h"
+#include <cerrno>
+#include <cstdarg>
+#include <cstdio>
+#include <cstring>
+
+namespace Fortran::runtime::io {
+RT_OFFLOAD_API_GROUP_BEGIN
+
+void IoErrorHandler::SignalError(int iostatOrErrno, const char *msg, ...) {
+ // Note that IOMSG= alone without IOSTAT=/END=/EOR=/ERR= does not suffice
+ // for error recovery (see F'2018 subclause 12.11).
+ switch (iostatOrErrno) {
+ case IostatOk:
+ return;
+ case IostatEnd:
+ if ((flags_ & (hasIoStat | hasEnd)) ||
+ ((flags_ & hasErr) && (flags_ & hasRec))) {
+ // EOF goes to ERR= when REC= is present
+ if (ioStat_ == IostatOk || ioStat_ < IostatEnd) {
+ ioStat_ = IostatEnd;
+ }
+ return;
+ }
+ break;
+ case IostatEor:
+ if (flags_ & (hasIoStat | hasEor)) {
+ if (ioStat_ == IostatOk || ioStat_ < IostatEor) {
+ ioStat_ = IostatEor; // least priority
+ }
+ return;
+ }
+ break;
+ default:
+ if (flags_ & (hasIoStat | hasErr)) {
+ if (ioStat_ <= 0) {
+ ioStat_ = iostatOrErrno; // priority over END=/EOR=
+ if (msg && (flags_ & hasIoMsg)) {
+#if !defined(RT_DEVICE_COMPILATION)
+ char buffer[256];
+ va_list ap;
+ va_start(ap, msg);
+ std::vsnprintf(buffer, sizeof buffer, msg, ap);
+ va_end(ap);
+#else
+ const char *buffer = "not implemented yet: IOSTAT with varargs";
+#endif
+ ioMsg_ = SaveDefaultCharacter(
+ buffer, Fortran::runtime::strlen(buffer) + 1, *this);
+ }
+ }
+ return;
+ }
+ break;
+ }
+ // I/O error not caught!
+ if (msg) {
+#if !defined(RT_DEVICE_COMPILATION)
+ va_list ap;
+ va_start(ap, msg);
+ CrashArgs(msg, ap);
+ va_end(ap);
+#else
+ Crash("not implemented yet: IOSTAT with varargs");
+#endif
+ } else if (const char *errstr{IostatErrorString(iostatOrErrno)}) {
+ Crash(errstr);
+ } else {
+#if !defined(RT_DEVICE_COMPILATION)
+ Crash("I/O error (errno=%d): %s", iostatOrErrno,
+ std::strerror(iostatOrErrno));
+#else
+ Crash("I/O error (errno=%d)", iostatOrErrno);
+#endif
+ }
+}
+
+void IoErrorHandler::SignalError(int iostatOrErrno) {
+ SignalError(iostatOrErrno, nullptr);
+}
+
+void IoErrorHandler::Forward(
+ int ioStatOrErrno, const char *msg, std::size_t length) {
+ if (ioStatOrErrno != IostatOk) {
+ if (msg) {
+ SignalError(ioStatOrErrno, "%.*s", static_cast<int>(length), msg);
+ } else {
+ SignalError(ioStatOrErrno);
+ }
+ }
+}
+
+void IoErrorHandler::SignalEnd() { SignalError(IostatEnd); }
+
+void IoErrorHandler::SignalEor() { SignalError(IostatEor); }
+
+void IoErrorHandler::SignalPendingError() {
+ int error{pendingError_};
+ pendingError_ = IostatOk;
+ SignalError(error);
+}
+
+void IoErrorHandler::SignalErrno() { SignalError(errno); }
+
+bool IoErrorHandler::GetIoMsg(char *buffer, std::size_t bufferLength) {
+ const char *msg{ioMsg_.get()};
+ if (!msg) {
+ msg = IostatErrorString(ioStat_ == IostatOk ? pendingError_ : ioStat_);
+ }
+ if (msg) {
+ ToFortranDefaultCharacter(buffer, bufferLength, msg);
+ return true;
+ }
+
+ // Following code is taken from llvm/lib/Support/Errno.cpp
+ // in LLVM v9.0.1 with inadequate modification for Fortran,
+ // since rectified.
+ bool ok{false};
+#if defined(RT_DEVICE_COMPILATION)
+ // strerror_r is not available on device.
+ msg = "errno description is not available on device";
+#elif HAVE_STRERROR_R
+ // strerror_r is thread-safe.
+#if defined(__GLIBC__) && defined(_GNU_SOURCE)
+ // glibc defines its own incompatible version of strerror_r
+ // which may not use the buffer supplied.
+ msg = ::strerror_r(ioStat_, buffer, bufferLength);
+#else
+ ok = ::strerror_r(ioStat_, buffer, bufferLength) == 0;
+#endif
+#elif HAVE_DECL_STRERROR_S // "Windows Secure API"
+ ok = ::strerror_s(buffer, bufferLength, ioStat_) == 0;
+#else
+ // Copy the thread un-safe result of strerror into
+ // the buffer as fast as possible to minimize impact
+ // of collision of strerror in multiple threads.
+ msg = strerror(ioStat_);
+#endif
+ if (msg) {
+ ToFortranDefaultCharacter(buffer, bufferLength, msg);
+ return true;
+ } else if (ok) {
+ std::size_t copied{Fortran::runtime::strlen(buffer)};
+ if (copied < bufferLength) {
+ std::memset(buffer + copied, ' ', bufferLength - copied);
+ }
+ return true;
+ } else {
+ return false;
+ }
+}
+
+RT_OFFLOAD_API_GROUP_END
+} // namespace Fortran::runtime::io
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/io-stmt.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/io-stmt.cpp
new file mode 100644
index 00000000000..8056c8db852
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/io-stmt.cpp
@@ -0,0 +1,1618 @@
+//===-- lib/runtime/io-stmt.cpp ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang-rt/runtime/io-stmt.h"
+#include "unit.h"
+#include "flang-rt/runtime/connection.h"
+#include "flang-rt/runtime/emit-encoded.h"
+#include "flang-rt/runtime/format.h"
+#include "flang-rt/runtime/memory.h"
+#include "flang-rt/runtime/tools.h"
+#include "flang-rt/runtime/utf.h"
+#include <algorithm>
+#include <cstdio>
+#include <cstring>
+#include <limits>
+#include <type_traits>
+
+namespace Fortran::runtime::io {
+RT_OFFLOAD_API_GROUP_BEGIN
+
+bool IoStatementBase::Emit(const char *, std::size_t, std::size_t) {
+ return false;
+}
+
+std::size_t IoStatementBase::GetNextInputBytes(const char *&p) {
+ p = nullptr;
+ return 0;
+}
+
+std::size_t IoStatementBase::ViewBytesInRecord(
+ const char *&p, bool forward) const {
+ p = nullptr;
+ return 0;
+}
+
+bool IoStatementBase::AdvanceRecord(int) { return false; }
+
+void IoStatementBase::BackspaceRecord() {}
+
+bool IoStatementBase::Receive(char *, std::size_t, std::size_t) {
+ return false;
+}
+
+Fortran::common::optional<DataEdit> IoStatementBase::GetNextDataEdit(
+ IoStatementState &, int) {
+ return Fortran::common::nullopt;
+}
+
+bool IoStatementBase::BeginReadingRecord() { return true; }
+
+void IoStatementBase::FinishReadingRecord() {}
+
+void IoStatementBase::HandleAbsolutePosition(std::int64_t) {}
+
+void IoStatementBase::HandleRelativePosition(std::int64_t) {}
+
+std::int64_t IoStatementBase::InquirePos() { return 0; }
+
+ExternalFileUnit *IoStatementBase::GetExternalFileUnit() const {
+ return nullptr;
+}
+
+bool IoStatementBase::Inquire(InquiryKeywordHash, char *, std::size_t) {
+ return false;
+}
+
+bool IoStatementBase::Inquire(InquiryKeywordHash, bool &) { return false; }
+
+bool IoStatementBase::Inquire(InquiryKeywordHash, std::int64_t, bool &) {
+ return false;
+}
+
+bool IoStatementBase::Inquire(InquiryKeywordHash, std::int64_t &) {
+ return false;
+}
+
+RT_API_ATTRS static const char *InquiryKeywordHashDecode(
+ char *buffer, std::size_t n, InquiryKeywordHash hash) {
+ if (n < 1) {
+ return nullptr;
+ }
+ char *p{buffer + n};
+ *--p = '\0';
+ while (hash > 1) {
+ if (p < buffer) {
+ return nullptr;
+ }
+ *--p = 'A' + (hash % 26);
+ hash /= 26;
+ }
+ return hash == 1 ? p : nullptr;
+}
+
+void IoStatementBase::BadInquiryKeywordHashCrash(InquiryKeywordHash inquiry) {
+ char buffer[16];
+ const char *decode{InquiryKeywordHashDecode(buffer, sizeof buffer, inquiry)};
+ Crash("Bad InquiryKeywordHash 0x%x (%s)", inquiry,
+ decode ? decode : "(cannot decode)");
+}
+
+template <Direction DIR>
+InternalIoStatementState<DIR>::InternalIoStatementState(
+ Buffer scalar, std::size_t length, const char *sourceFile, int sourceLine)
+ : IoStatementBase{sourceFile, sourceLine}, unit_{scalar, length, 1} {}
+
+template <Direction DIR>
+InternalIoStatementState<DIR>::InternalIoStatementState(
+ const Descriptor &d, const char *sourceFile, int sourceLine)
+ : IoStatementBase{sourceFile, sourceLine}, unit_{d, *this} {}
+
+template <Direction DIR>
+bool InternalIoStatementState<DIR>::Emit(
+ const char *data, std::size_t bytes, std::size_t /*elementBytes*/) {
+ if constexpr (DIR == Direction::Input) {
+ Crash("InternalIoStatementState<Direction::Input>::Emit() called");
+ return false;
+ }
+ return unit_.Emit(data, bytes, *this);
+}
+
+template <Direction DIR>
+std::size_t InternalIoStatementState<DIR>::GetNextInputBytes(const char *&p) {
+ return unit_.GetNextInputBytes(p, *this);
+}
+
+// InternalIoStatementState<DIR>::ViewBytesInRecord() not needed or defined
+
+template <Direction DIR>
+bool InternalIoStatementState<DIR>::AdvanceRecord(int n) {
+ while (n-- > 0) {
+ if (!unit_.AdvanceRecord(*this)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+template <Direction DIR> void InternalIoStatementState<DIR>::BackspaceRecord() {
+ unit_.BackspaceRecord(*this);
+}
+
+template <Direction DIR> int InternalIoStatementState<DIR>::EndIoStatement() {
+ auto result{IoStatementBase::EndIoStatement()};
+ if (free_) {
+ FreeMemory(this);
+ }
+ return result;
+}
+
+template <Direction DIR>
+void InternalIoStatementState<DIR>::HandleAbsolutePosition(std::int64_t n) {
+ return unit_.HandleAbsolutePosition(n);
+}
+
+template <Direction DIR>
+void InternalIoStatementState<DIR>::HandleRelativePosition(std::int64_t n) {
+ return unit_.HandleRelativePosition(n);
+}
+
+template <Direction DIR>
+std::int64_t InternalIoStatementState<DIR>::InquirePos() {
+ return unit_.InquirePos();
+}
+
+template <Direction DIR, typename CHAR>
+RT_API_ATTRS
+InternalFormattedIoStatementState<DIR, CHAR>::InternalFormattedIoStatementState(
+ Buffer buffer, std::size_t length, const CharType *format,
+ std::size_t formatLength, const Descriptor *formatDescriptor,
+ const char *sourceFile, int sourceLine)
+ : InternalIoStatementState<DIR>{buffer, length, sourceFile, sourceLine},
+ ioStatementState_{*this},
+ format_{*this, format, formatLength, formatDescriptor} {}
+
+template <Direction DIR, typename CHAR>
+RT_API_ATTRS
+InternalFormattedIoStatementState<DIR, CHAR>::InternalFormattedIoStatementState(
+ const Descriptor &d, const CharType *format, std::size_t formatLength,
+ const Descriptor *formatDescriptor, const char *sourceFile, int sourceLine)
+ : InternalIoStatementState<DIR>{d, sourceFile, sourceLine},
+ ioStatementState_{*this},
+ format_{*this, format, formatLength, formatDescriptor} {}
+
+template <Direction DIR, typename CHAR>
+void InternalFormattedIoStatementState<DIR, CHAR>::CompleteOperation() {
+ if (!this->completedOperation()) {
+ if constexpr (DIR == Direction::Output) {
+ format_.Finish(*this);
+ unit_.AdvanceRecord(*this);
+ }
+ IoStatementBase::CompleteOperation();
+ }
+}
+
+template <Direction DIR, typename CHAR>
+int InternalFormattedIoStatementState<DIR, CHAR>::EndIoStatement() {
+ CompleteOperation();
+ return InternalIoStatementState<DIR>::EndIoStatement();
+}
+
+template <Direction DIR>
+InternalListIoStatementState<DIR>::InternalListIoStatementState(
+ Buffer buffer, std::size_t length, const char *sourceFile, int sourceLine)
+ : InternalIoStatementState<DIR>{buffer, length, sourceFile, sourceLine},
+ ioStatementState_{*this} {}
+
+template <Direction DIR>
+InternalListIoStatementState<DIR>::InternalListIoStatementState(
+ const Descriptor &d, const char *sourceFile, int sourceLine)
+ : InternalIoStatementState<DIR>{d, sourceFile, sourceLine},
+ ioStatementState_{*this} {}
+
+template <Direction DIR>
+void InternalListIoStatementState<DIR>::CompleteOperation() {
+ if (!this->completedOperation()) {
+ if constexpr (DIR == Direction::Output) {
+ if (unit_.furthestPositionInRecord > 0) {
+ unit_.AdvanceRecord(*this);
+ }
+ }
+ IoStatementBase::CompleteOperation();
+ }
+}
+
+template <Direction DIR>
+int InternalListIoStatementState<DIR>::EndIoStatement() {
+ CompleteOperation();
+ if constexpr (DIR == Direction::Input) {
+ if (int status{ListDirectedStatementState<DIR>::EndIoStatement()};
+ status != IostatOk) {
+ return status;
+ }
+ }
+ return InternalIoStatementState<DIR>::EndIoStatement();
+}
+
+ExternalIoStatementBase::ExternalIoStatementBase(
+ ExternalFileUnit &unit, const char *sourceFile, int sourceLine)
+ : IoStatementBase{sourceFile, sourceLine}, unit_{unit} {}
+
+MutableModes &ExternalIoStatementBase::mutableModes() {
+ if (const ChildIo * child{unit_.GetChildIo()}) {
+#if !defined(RT_DEVICE_AVOID_RECURSION)
+ return child->parent().mutableModes();
+#else
+ ReportUnsupportedChildIo();
+#endif
+ }
+ return unit_.modes;
+}
+
+ConnectionState &ExternalIoStatementBase::GetConnectionState() { return unit_; }
+
+int ExternalIoStatementBase::EndIoStatement() {
+ CompleteOperation();
+ auto result{IoStatementBase::EndIoStatement()};
+#if !defined(RT_USE_PSEUDO_FILE_UNIT)
+ auto unitNumber{unit_.unitNumber()};
+ unit_.EndIoStatement(); // annihilates *this in unit_.u_
+ if (destroy_) {
+ if (ExternalFileUnit *
+ toClose{ExternalFileUnit::LookUpForClose(unitNumber)}) {
+ toClose->Close(CloseStatus::Delete, *this);
+ toClose->DestroyClosed();
+ }
+ }
+#else
+ // Fetch the unit pointer before *this disappears.
+ ExternalFileUnit *unitPtr{&unit_};
+ // The pseudo file units are dynamically allocated
+ // and are not tracked in the unit map.
+ // They have to be destructed and deallocated here.
+ unitPtr->~ExternalFileUnit();
+ FreeMemory(unitPtr);
+#endif
+ return result;
+}
+
+void ExternalIoStatementBase::SetAsynchronous() {
+ asynchronousID_ = unit().GetAsynchronousId(*this);
+}
+
+std::int64_t ExternalIoStatementBase::InquirePos() {
+ return unit_.InquirePos();
+}
+
+void OpenStatementState::set_path(const char *path, std::size_t length) {
+ pathLength_ = TrimTrailingSpaces(path, length);
+ path_ = SaveDefaultCharacter(path, pathLength_, *this);
+}
+
+void OpenStatementState::CompleteOperation() {
+ if (completedOperation()) {
+ return;
+ }
+ if (position_) {
+ if (access_ && *access_ == Access::Direct) {
+ SignalError("POSITION= may not be set with ACCESS='DIRECT'");
+ position_.reset();
+ }
+ }
+ if (status_) { // 12.5.6.10
+ if ((*status_ == OpenStatus::New || *status_ == OpenStatus::Replace) &&
+ !path_.get()) {
+ SignalError("FILE= required on OPEN with STATUS='NEW' or 'REPLACE'");
+ } else if (*status_ == OpenStatus::Scratch && path_.get()) {
+ SignalError("FILE= may not appear on OPEN with STATUS='SCRATCH'");
+ }
+ }
+ // F'2023 12.5.6.13 - NEWUNIT= requires either FILE= or STATUS='SCRATCH'
+ if (isNewUnit_ && !path_.get() &&
+ status_.value_or(OpenStatus::Unknown) != OpenStatus::Scratch) {
+ SignalError(IostatBadNewUnit);
+ status_ = OpenStatus::Scratch; // error recovery
+ }
+ if (path_.get() || wasExtant_ ||
+ (status_ && *status_ == OpenStatus::Scratch)) {
+ if (unit().OpenUnit(status_, action_, position_.value_or(Position::AsIs),
+ std::move(path_), pathLength_, convert_, *this)) {
+ wasExtant_ = false; // existing unit was closed
+ }
+ } else {
+ unit().OpenAnonymousUnit(
+ status_, action_, position_.value_or(Position::AsIs), convert_, *this);
+ }
+ if (access_) {
+ if (*access_ != unit().access) {
+ if (wasExtant_) {
+ SignalError("ACCESS= may not be changed on an open unit");
+ access_.reset();
+ }
+ }
+ if (access_) {
+ unit().access = *access_;
+ }
+ }
+ if (!unit().isUnformatted) {
+ unit().isUnformatted = isUnformatted_;
+ }
+ if (isUnformatted_ && *isUnformatted_ != *unit().isUnformatted) {
+ if (wasExtant_) {
+ SignalError("FORM= may not be changed on an open unit");
+ }
+ unit().isUnformatted = *isUnformatted_;
+ }
+ if (!unit().isUnformatted) {
+ // Set default format (C.7.4 point 2).
+ unit().isUnformatted = unit().access != Access::Sequential;
+ }
+ if (!wasExtant_ && InError()) {
+ // Release the new unit on failure
+ set_destroy();
+ }
+ IoStatementBase::CompleteOperation();
+}
+
+int OpenStatementState::EndIoStatement() {
+ CompleteOperation();
+ return ExternalIoStatementBase::EndIoStatement();
+}
+
+int CloseStatementState::EndIoStatement() {
+ CompleteOperation();
+ int result{ExternalIoStatementBase::EndIoStatement()};
+ unit().CloseUnit(status_, *this);
+ unit().DestroyClosed();
+ return result;
+}
+
+void NoUnitIoStatementState::CompleteOperation() {
+ SignalPendingError();
+ IoStatementBase::CompleteOperation();
+}
+
+int NoUnitIoStatementState::EndIoStatement() {
+ CompleteOperation();
+ auto result{IoStatementBase::EndIoStatement()};
+ FreeMemory(this);
+ return result;
+}
+
+template <Direction DIR>
+ExternalIoStatementState<DIR>::ExternalIoStatementState(
+ ExternalFileUnit &unit, const char *sourceFile, int sourceLine)
+ : ExternalIoStatementBase{unit, sourceFile, sourceLine}, mutableModes_{
+ unit.modes} {
+ if constexpr (DIR == Direction::Output) {
+ // If the last statement was a non-advancing IO input statement, the unit
+ // furthestPositionInRecord was not advanced, but the positionInRecord may
+ // have been advanced. Advance furthestPositionInRecord here to avoid
+ // overwriting the part of the record that has been read with blanks.
+ unit.furthestPositionInRecord =
+ std::max(unit.furthestPositionInRecord, unit.positionInRecord);
+ }
+}
+
+template <Direction DIR>
+void ExternalIoStatementState<DIR>::CompleteOperation() {
+ if (completedOperation()) {
+ return;
+ }
+ if constexpr (DIR == Direction::Input) {
+ BeginReadingRecord(); // in case there were no I/O items
+ if (mutableModes().nonAdvancing && !InError()) {
+ unit().leftTabLimit = unit().furthestPositionInRecord;
+ } else {
+ FinishReadingRecord();
+ }
+ } else { // output
+ if (mutableModes().nonAdvancing) {
+ // Make effects of positioning past the last Emit() visible with blanks.
+ if (unit().positionInRecord > unit().furthestPositionInRecord) {
+ unit().Emit("", 0, 1, *this); // Emit() will pad
+ }
+ unit().leftTabLimit = unit().positionInRecord;
+ } else {
+ unit().AdvanceRecord(*this);
+ }
+ unit().FlushIfTerminal(*this);
+ }
+ return IoStatementBase::CompleteOperation();
+}
+
+template <Direction DIR> int ExternalIoStatementState<DIR>::EndIoStatement() {
+ CompleteOperation();
+ return ExternalIoStatementBase::EndIoStatement();
+}
+
+template <Direction DIR>
+bool ExternalIoStatementState<DIR>::Emit(
+ const char *data, std::size_t bytes, std::size_t elementBytes) {
+ if constexpr (DIR == Direction::Input) {
+ Crash("ExternalIoStatementState::Emit(char) called for input statement");
+ }
+ return unit().Emit(data, bytes, elementBytes, *this);
+}
+
+template <Direction DIR>
+std::size_t ExternalIoStatementState<DIR>::GetNextInputBytes(const char *&p) {
+ return unit().GetNextInputBytes(p, *this);
+}
+
+template <Direction DIR>
+std::size_t ExternalIoStatementState<DIR>::ViewBytesInRecord(
+ const char *&p, bool forward) const {
+ return unit().ViewBytesInRecord(p, forward);
+}
+
+template <Direction DIR>
+bool ExternalIoStatementState<DIR>::AdvanceRecord(int n) {
+ while (n-- > 0) {
+ if (!unit().AdvanceRecord(*this)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+template <Direction DIR> void ExternalIoStatementState<DIR>::BackspaceRecord() {
+ unit().BackspaceRecord(*this);
+}
+
+template <Direction DIR>
+void ExternalIoStatementState<DIR>::HandleAbsolutePosition(std::int64_t n) {
+ return unit().HandleAbsolutePosition(n);
+}
+
+template <Direction DIR>
+void ExternalIoStatementState<DIR>::HandleRelativePosition(std::int64_t n) {
+ return unit().HandleRelativePosition(n);
+}
+
+template <Direction DIR>
+bool ExternalIoStatementState<DIR>::BeginReadingRecord() {
+ if constexpr (DIR == Direction::Input) {
+ return unit().BeginReadingRecord(*this);
+ } else {
+ Crash("ExternalIoStatementState<Direction::Output>::BeginReadingRecord() "
+ "called");
+ return false;
+ }
+}
+
+template <Direction DIR>
+void ExternalIoStatementState<DIR>::FinishReadingRecord() {
+ if constexpr (DIR == Direction::Input) {
+ unit().FinishReadingRecord(*this);
+ } else {
+ Crash("ExternalIoStatementState<Direction::Output>::FinishReadingRecord() "
+ "called");
+ }
+}
+
+template <Direction DIR, typename CHAR>
+ExternalFormattedIoStatementState<DIR, CHAR>::ExternalFormattedIoStatementState(
+ ExternalFileUnit &unit, const CHAR *format, std::size_t formatLength,
+ const Descriptor *formatDescriptor, const char *sourceFile, int sourceLine)
+ : ExternalIoStatementState<DIR>{unit, sourceFile, sourceLine},
+ format_{*this, format, formatLength, formatDescriptor} {}
+
+template <Direction DIR, typename CHAR>
+void ExternalFormattedIoStatementState<DIR, CHAR>::CompleteOperation() {
+ if (this->completedOperation()) {
+ return;
+ }
+ if constexpr (DIR == Direction::Input) {
+ this->BeginReadingRecord(); // in case there were no I/O items
+ }
+ format_.Finish(*this);
+ return ExternalIoStatementState<DIR>::CompleteOperation();
+}
+
+template <Direction DIR, typename CHAR>
+int ExternalFormattedIoStatementState<DIR, CHAR>::EndIoStatement() {
+ CompleteOperation();
+ return ExternalIoStatementState<DIR>::EndIoStatement();
+}
+
+Fortran::common::optional<DataEdit> IoStatementState::GetNextDataEdit(int n) {
+ return common::visit(
+ [&](auto &x) { return x.get().GetNextDataEdit(*this, n); }, u_);
+}
+
+bool IoStatementState::Emit(
+ const char *data, std::size_t bytes, std::size_t elementBytes) {
+ return common::visit(
+ [=](auto &x) { return x.get().Emit(data, bytes, elementBytes); }, u_);
+}
+
+bool IoStatementState::Receive(
+ char *data, std::size_t n, std::size_t elementBytes) {
+ return common::visit(
+ [=](auto &x) { return x.get().Receive(data, n, elementBytes); }, u_);
+}
+
+std::size_t IoStatementState::GetNextInputBytes(const char *&p) {
+ return common::visit(
+ [&](auto &x) { return x.get().GetNextInputBytes(p); }, u_);
+}
+
+bool IoStatementState::AdvanceRecord(int n) {
+ return common::visit([=](auto &x) { return x.get().AdvanceRecord(n); }, u_);
+}
+
+void IoStatementState::BackspaceRecord() {
+ common::visit([](auto &x) { x.get().BackspaceRecord(); }, u_);
+}
+
+void IoStatementState::HandleRelativePosition(std::int64_t n) {
+ common::visit([=](auto &x) { x.get().HandleRelativePosition(n); }, u_);
+}
+
+void IoStatementState::HandleAbsolutePosition(std::int64_t n) {
+ common::visit([=](auto &x) { x.get().HandleAbsolutePosition(n); }, u_);
+}
+
+void IoStatementState::CompleteOperation() {
+ common::visit([](auto &x) { x.get().CompleteOperation(); }, u_);
+}
+
+int IoStatementState::EndIoStatement() {
+ return common::visit([](auto &x) { return x.get().EndIoStatement(); }, u_);
+}
+
+ConnectionState &IoStatementState::GetConnectionState() {
+ return common::visit(
+ [](auto &x) -> ConnectionState & { return x.get().GetConnectionState(); },
+ u_);
+}
+
+MutableModes &IoStatementState::mutableModes() {
+ return common::visit(
+ [](auto &x) -> MutableModes & { return x.get().mutableModes(); }, u_);
+}
+
+bool IoStatementState::BeginReadingRecord() {
+ return common::visit(
+ [](auto &x) { return x.get().BeginReadingRecord(); }, u_);
+}
+
+IoErrorHandler &IoStatementState::GetIoErrorHandler() const {
+ return common::visit(
+ [](auto &x) -> IoErrorHandler & {
+ return static_cast<IoErrorHandler &>(x.get());
+ },
+ u_);
+}
+
+ExternalFileUnit *IoStatementState::GetExternalFileUnit() const {
+ return common::visit(
+ [](auto &x) { return x.get().GetExternalFileUnit(); }, u_);
+}
+
+Fortran::common::optional<char32_t> IoStatementState::GetCurrentCharSlow(
+ std::size_t &byteCount) {
+ const char *p{nullptr};
+ std::size_t bytes{GetNextInputBytes(p)};
+ if (bytes == 0) {
+ byteCount = 0;
+ return Fortran::common::nullopt;
+ } else {
+ const ConnectionState &connection{GetConnectionState()};
+ if (connection.isUTF8) {
+ std::size_t length{MeasureUTF8Bytes(*p)};
+ if (length <= bytes) {
+ if (auto result{DecodeUTF8(p)}) {
+ byteCount = length;
+ return result;
+ }
+ }
+ GetIoErrorHandler().SignalError(IostatUTF8Decoding);
+ // Error recovery: return the next byte
+ } else if (connection.internalIoCharKind > 1) {
+ byteCount = connection.internalIoCharKind;
+ if (byteCount == 2) {
+ return *reinterpret_cast<const char16_t *>(p);
+ } else {
+ return *reinterpret_cast<const char32_t *>(p);
+ }
+ }
+ byteCount = 1;
+ return *p;
+ }
+}
+
+IoStatementState::FastAsciiField IoStatementState::GetUpcomingFastAsciiField() {
+ ConnectionState &connection{GetConnectionState()};
+ if (!connection.isUTF8 && connection.internalIoCharKind <= 1) {
+ const char *p{nullptr};
+ if (std::size_t bytes{GetNextInputBytes(p)}) {
+ return FastAsciiField(connection, p, bytes);
+ }
+ }
+ return FastAsciiField(connection);
+}
+
+Fortran::common::optional<char32_t> IoStatementState::NextInField(
+ Fortran::common::optional<int> &remaining, const DataEdit &edit,
+ FastAsciiField *field) {
+ std::size_t byteCount{0};
+ if (!remaining) { // Stream, list-directed, NAMELIST, &c.
+ if (auto next{GetCurrentChar(byteCount, field)}) {
+ if ((*next < '0' || *next == ';') && edit.width.value_or(0) == 0) {
+ // list-directed, NAMELIST, I0 &c., or width-free I/G:
+ // check for separator character
+ switch (*next) {
+ case ' ':
+ case '\t':
+ case '/':
+ case '(':
+ case ')':
+ case '\'':
+ case '"':
+ case '*':
+ case '\n': // for stream access
+ return Fortran::common::nullopt;
+ case '&':
+ case '$':
+ if (edit.IsNamelist()) {
+ return Fortran::common::nullopt;
+ }
+ break;
+ case ',':
+ if (!(edit.modes.editingFlags & decimalComma)) {
+ return Fortran::common::nullopt;
+ }
+ break;
+ case ';':
+ if (edit.modes.editingFlags & decimalComma) {
+ return Fortran::common::nullopt;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ if (field) {
+ field->Advance(1, byteCount);
+ } else {
+ HandleRelativePosition(byteCount);
+ GotChar(byteCount);
+ }
+ return next;
+ }
+ } else if (*remaining > 0) {
+ if (auto next{GetCurrentChar(byteCount, field)}) {
+ if (byteCount > static_cast<std::size_t>(*remaining)) {
+ return Fortran::common::nullopt;
+ }
+ *remaining -= byteCount;
+ if (field) {
+ field->Advance(1, byteCount);
+ } else {
+ HandleRelativePosition(byteCount);
+ GotChar(byteCount);
+ }
+ return next;
+ }
+ if (CheckForEndOfRecord(0,
+ field ? field->connection() : GetConnectionState())) { // do padding
+ --*remaining;
+ return Fortran::common::optional<char32_t>{' '};
+ }
+ }
+ return Fortran::common::nullopt;
+}
+
+bool IoStatementState::CheckForEndOfRecord(
+ std::size_t afterReading, const ConnectionState &connection) {
+ if (!connection.IsAtEOF()) {
+ if (auto length{connection.EffectiveRecordLength()}) {
+ if (connection.positionInRecord +
+ static_cast<std::int64_t>(afterReading) >=
+ *length) {
+ IoErrorHandler &handler{GetIoErrorHandler()};
+ const auto &modes{mutableModes()};
+ if (modes.nonAdvancing) {
+ if (connection.access == Access::Stream &&
+ connection.unterminatedRecord) {
+ // Reading final unterminated record left by a
+ // non-advancing WRITE on a stream file prior to
+ // positioning or ENDFILE.
+ handler.SignalEnd();
+ } else {
+ handler.SignalEor();
+ }
+ } else if (!modes.pad) {
+ handler.SignalError(IostatRecordReadOverrun);
+ }
+ return modes.pad; // PAD='YES'
+ }
+ }
+ }
+ return false;
+}
+
+bool IoStatementState::Inquire(
+ InquiryKeywordHash inquiry, char *out, std::size_t chars) {
+ return common::visit(
+ [&](auto &x) { return x.get().Inquire(inquiry, out, chars); }, u_);
+}
+
+bool IoStatementState::Inquire(InquiryKeywordHash inquiry, bool &out) {
+ return common::visit(
+ [&](auto &x) { return x.get().Inquire(inquiry, out); }, u_);
+}
+
+bool IoStatementState::Inquire(
+ InquiryKeywordHash inquiry, std::int64_t id, bool &out) {
+ return common::visit(
+ [&](auto &x) { return x.get().Inquire(inquiry, id, out); }, u_);
+}
+
+bool IoStatementState::Inquire(InquiryKeywordHash inquiry, std::int64_t &n) {
+ return common::visit(
+ [&](auto &x) { return x.get().Inquire(inquiry, n); }, u_);
+}
+
+std::int64_t IoStatementState::InquirePos() {
+ return common::visit([&](auto &x) { return x.get().InquirePos(); }, u_);
+}
+
+void IoStatementState::GotChar(int n) {
+ if (auto *formattedIn{
+ get_if<FormattedIoStatementState<Direction::Input>>()}) {
+ formattedIn->GotChar(n);
+ } else {
+ GetIoErrorHandler().Crash("IoStatementState::GotChar() called for "
+ "statement that is not formatted input");
+ }
+}
+
+std::size_t
+FormattedIoStatementState<Direction::Input>::GetEditDescriptorChars() const {
+ return chars_;
+}
+
+void FormattedIoStatementState<Direction::Input>::GotChar(int n) {
+ chars_ += n;
+}
+
+bool ListDirectedStatementState<Direction::Output>::EmitLeadingSpaceOrAdvance(
+ IoStatementState &io, std::size_t length, bool isCharacter) {
+ const ConnectionState &connection{io.GetConnectionState()};
+ int space{connection.positionInRecord == 0 ||
+ !(isCharacter && lastWasUndelimitedCharacter())};
+ set_lastWasUndelimitedCharacter(false);
+ if (connection.NeedAdvance(space + length)) {
+ return io.AdvanceRecord();
+ }
+ if (space) {
+ return EmitAscii(io, " ", 1);
+ }
+ return true;
+}
+
+Fortran::common::optional<DataEdit>
+ListDirectedStatementState<Direction::Output>::GetNextDataEdit(
+ IoStatementState &io, int maxRepeat) {
+ DataEdit edit;
+ edit.descriptor = DataEdit::ListDirected;
+ edit.repeat = maxRepeat;
+ edit.modes = io.mutableModes();
+ return edit;
+}
+
+int ListDirectedStatementState<Direction::Input>::EndIoStatement() {
+ if (repeatPosition_) {
+ repeatPosition_->Cancel();
+ }
+ return IostatOk;
+}
+
+Fortran::common::optional<DataEdit>
+ListDirectedStatementState<Direction::Input>::GetNextDataEdit(
+ IoStatementState &io, int maxRepeat) {
+ // N.B. list-directed transfers cannot be nonadvancing (C1221)
+ DataEdit edit;
+ edit.descriptor = DataEdit::ListDirected;
+ edit.repeat = 1; // may be overridden below
+ edit.modes = io.mutableModes();
+ if (hitSlash_) { // everything after '/' is nullified
+ edit.descriptor = DataEdit::ListDirectedNullValue;
+ return edit;
+ }
+ char32_t comma{','};
+ if (edit.modes.editingFlags & decimalComma) {
+ comma = ';';
+ }
+ std::size_t byteCount{0};
+ if (remaining_ > 0 && !realPart_) { // "r*c" repetition in progress
+ RUNTIME_CHECK(io.GetIoErrorHandler(), repeatPosition_.has_value());
+ repeatPosition_.reset(); // restores the saved position
+ if (!imaginaryPart_) {
+ edit.repeat = std::min<int>(remaining_, maxRepeat);
+ auto ch{io.GetCurrentChar(byteCount)};
+ if (!ch || *ch == ' ' || *ch == '\t' || *ch == comma) {
+ // "r*" repeated null
+ edit.descriptor = DataEdit::ListDirectedNullValue;
+ }
+ }
+ remaining_ -= edit.repeat;
+ if (remaining_ > 0) {
+ repeatPosition_.emplace(io);
+ }
+ if (!imaginaryPart_) {
+ return edit;
+ }
+ }
+ // Skip separators, handle a "r*c" repeat count; see 13.10.2 in Fortran 2018
+ if (imaginaryPart_) {
+ imaginaryPart_ = false;
+ } else if (realPart_) {
+ realPart_ = false;
+ imaginaryPart_ = true;
+ edit.descriptor = DataEdit::ListDirectedImaginaryPart;
+ }
+ auto fastField{io.GetUpcomingFastAsciiField()};
+ auto ch{io.GetNextNonBlank(byteCount, &fastField)};
+ if (ch && *ch == comma && eatComma_) {
+ // Consume comma & whitespace after previous item.
+ // This includes the comma between real and imaginary components
+ // in list-directed/NAMELIST complex input.
+ // (When DECIMAL='COMMA', the comma is actually a semicolon.)
+ fastField.Advance(0, byteCount);
+ ch = io.GetNextNonBlank(byteCount, &fastField);
+ }
+ eatComma_ = true;
+ if (!ch) {
+ return Fortran::common::nullopt;
+ }
+ if (*ch == '/') {
+ hitSlash_ = true;
+ edit.descriptor = DataEdit::ListDirectedNullValue;
+ return edit;
+ }
+ if (*ch == comma) { // separator: null value
+ edit.descriptor = DataEdit::ListDirectedNullValue;
+ return edit;
+ }
+ if (imaginaryPart_) { // can't repeat components
+ return edit;
+ }
+ if (*ch >= '0' && *ch <= '9' && fastField.MightHaveAsterisk()) {
+ // look for "r*" repetition count
+ auto start{fastField.connection().positionInRecord};
+ int r{0};
+ do {
+ static auto constexpr clamp{(std::numeric_limits<int>::max() - '9') / 10};
+ if (r >= clamp) {
+ r = 0;
+ break;
+ }
+ r = 10 * r + (*ch - '0');
+ fastField.Advance(0, byteCount);
+ ch = io.GetCurrentChar(byteCount, &fastField);
+ } while (ch && *ch >= '0' && *ch <= '9');
+ if (r > 0 && ch && *ch == '*') { // subtle: r must be nonzero
+ fastField.Advance(0, byteCount);
+ ch = io.GetCurrentChar(byteCount, &fastField);
+ if (ch && *ch == '/') { // r*/
+ hitSlash_ = true;
+ edit.descriptor = DataEdit::ListDirectedNullValue;
+ return edit;
+ }
+ if (!ch || *ch == ' ' || *ch == '\t' || *ch == comma) { // "r*" null
+ edit.descriptor = DataEdit::ListDirectedNullValue;
+ }
+ edit.repeat = std::min<int>(r, maxRepeat);
+ remaining_ = r - edit.repeat;
+ if (remaining_ > 0) {
+ repeatPosition_.emplace(io);
+ }
+ } else { // not a repetition count, just an integer value; rewind
+ fastField.connection().positionInRecord = start;
+ }
+ }
+ if (!imaginaryPart_ && ch && *ch == '(') {
+ realPart_ = true;
+ fastField.connection().HandleRelativePosition(byteCount);
+ edit.descriptor = DataEdit::ListDirectedRealPart;
+ }
+ return edit;
+}
+
+template <Direction DIR>
+int ExternalListIoStatementState<DIR>::EndIoStatement() {
+ if constexpr (DIR == Direction::Input) {
+ if (auto status{ListDirectedStatementState<DIR>::EndIoStatement()};
+ status != IostatOk) {
+ return status;
+ }
+ }
+ return ExternalIoStatementState<DIR>::EndIoStatement();
+}
+
+template <Direction DIR>
+bool ExternalUnformattedIoStatementState<DIR>::Receive(
+ char *data, std::size_t bytes, std::size_t elementBytes) {
+ if constexpr (DIR == Direction::Output) {
+ this->Crash("ExternalUnformattedIoStatementState::Receive() called for "
+ "output statement");
+ }
+ return this->unit().Receive(data, bytes, elementBytes, *this);
+}
+
+template <Direction DIR>
+ChildIoStatementState<DIR>::ChildIoStatementState(
+ ChildIo &child, const char *sourceFile, int sourceLine)
+ : IoStatementBase{sourceFile, sourceLine}, child_{child} {}
+
+template <Direction DIR>
+MutableModes &ChildIoStatementState<DIR>::mutableModes() {
+#if !defined(RT_DEVICE_AVOID_RECURSION)
+ return child_.parent().mutableModes();
+#else
+ ReportUnsupportedChildIo();
+#endif
+}
+
+template <Direction DIR>
+ConnectionState &ChildIoStatementState<DIR>::GetConnectionState() {
+#if !defined(RT_DEVICE_AVOID_RECURSION)
+ return child_.parent().GetConnectionState();
+#else
+ ReportUnsupportedChildIo();
+#endif
+}
+
+template <Direction DIR>
+ExternalFileUnit *ChildIoStatementState<DIR>::GetExternalFileUnit() const {
+#if !defined(RT_DEVICE_AVOID_RECURSION)
+ return child_.parent().GetExternalFileUnit();
+#else
+ ReportUnsupportedChildIo();
+#endif
+}
+
+template <Direction DIR> int ChildIoStatementState<DIR>::EndIoStatement() {
+ CompleteOperation();
+ auto result{IoStatementBase::EndIoStatement()};
+ child_.EndIoStatement(); // annihilates *this in child_.u_
+ return result;
+}
+
+template <Direction DIR>
+bool ChildIoStatementState<DIR>::Emit(
+ const char *data, std::size_t bytes, std::size_t elementBytes) {
+#if !defined(RT_DEVICE_AVOID_RECURSION)
+ return child_.parent().Emit(data, bytes, elementBytes);
+#else
+ ReportUnsupportedChildIo();
+#endif
+}
+
+template <Direction DIR>
+std::size_t ChildIoStatementState<DIR>::GetNextInputBytes(const char *&p) {
+#if !defined(RT_DEVICE_AVOID_RECURSION)
+ return child_.parent().GetNextInputBytes(p);
+#else
+ ReportUnsupportedChildIo();
+#endif
+}
+
+template <Direction DIR>
+void ChildIoStatementState<DIR>::HandleAbsolutePosition(std::int64_t n) {
+#if !defined(RT_DEVICE_AVOID_RECURSION)
+ return child_.parent().HandleAbsolutePosition(n);
+#else
+ ReportUnsupportedChildIo();
+#endif
+}
+
+template <Direction DIR>
+void ChildIoStatementState<DIR>::HandleRelativePosition(std::int64_t n) {
+#if !defined(RT_DEVICE_AVOID_RECURSION)
+ return child_.parent().HandleRelativePosition(n);
+#else
+ ReportUnsupportedChildIo();
+#endif
+}
+
+template <Direction DIR, typename CHAR>
+ChildFormattedIoStatementState<DIR, CHAR>::ChildFormattedIoStatementState(
+ ChildIo &child, const CHAR *format, std::size_t formatLength,
+ const Descriptor *formatDescriptor, const char *sourceFile, int sourceLine)
+ : ChildIoStatementState<DIR>{child, sourceFile, sourceLine},
+ mutableModes_{child.parent().mutableModes()}, format_{*this, format,
+ formatLength,
+ formatDescriptor} {}
+
+template <Direction DIR, typename CHAR>
+void ChildFormattedIoStatementState<DIR, CHAR>::CompleteOperation() {
+ if (!this->completedOperation()) {
+ format_.Finish(*this);
+ ChildIoStatementState<DIR>::CompleteOperation();
+ }
+}
+
+template <Direction DIR, typename CHAR>
+int ChildFormattedIoStatementState<DIR, CHAR>::EndIoStatement() {
+ CompleteOperation();
+ return ChildIoStatementState<DIR>::EndIoStatement();
+}
+
+template <Direction DIR, typename CHAR>
+bool ChildFormattedIoStatementState<DIR, CHAR>::AdvanceRecord(int n) {
+#if !defined(RT_DEVICE_AVOID_RECURSION)
+ return this->child().parent().AdvanceRecord(n);
+#else
+ this->ReportUnsupportedChildIo();
+#endif
+}
+
+template <Direction DIR>
+bool ChildUnformattedIoStatementState<DIR>::Receive(
+ char *data, std::size_t bytes, std::size_t elementBytes) {
+#if !defined(RT_DEVICE_AVOID_RECURSION)
+ return this->child().parent().Receive(data, bytes, elementBytes);
+#else
+ this->ReportUnsupportedChildIo();
+#endif
+}
+
+template <Direction DIR> int ChildListIoStatementState<DIR>::EndIoStatement() {
+ if constexpr (DIR == Direction::Input) {
+ if (int status{ListDirectedStatementState<DIR>::EndIoStatement()};
+ status != IostatOk) {
+ return status;
+ }
+ }
+ return ChildIoStatementState<DIR>::EndIoStatement();
+}
+
+template class InternalIoStatementState<Direction::Output>;
+template class InternalIoStatementState<Direction::Input>;
+template class InternalFormattedIoStatementState<Direction::Output>;
+template class InternalFormattedIoStatementState<Direction::Input>;
+template class InternalListIoStatementState<Direction::Output>;
+template class InternalListIoStatementState<Direction::Input>;
+template class ExternalIoStatementState<Direction::Output>;
+template class ExternalIoStatementState<Direction::Input>;
+template class ExternalFormattedIoStatementState<Direction::Output>;
+template class ExternalFormattedIoStatementState<Direction::Input>;
+template class ExternalListIoStatementState<Direction::Output>;
+template class ExternalListIoStatementState<Direction::Input>;
+template class ExternalUnformattedIoStatementState<Direction::Output>;
+template class ExternalUnformattedIoStatementState<Direction::Input>;
+template class ChildIoStatementState<Direction::Output>;
+template class ChildIoStatementState<Direction::Input>;
+template class ChildFormattedIoStatementState<Direction::Output>;
+template class ChildFormattedIoStatementState<Direction::Input>;
+template class ChildListIoStatementState<Direction::Output>;
+template class ChildListIoStatementState<Direction::Input>;
+template class ChildUnformattedIoStatementState<Direction::Output>;
+template class ChildUnformattedIoStatementState<Direction::Input>;
+
+void ExternalMiscIoStatementState::CompleteOperation() {
+ if (completedOperation()) {
+ return;
+ }
+ ExternalFileUnit &ext{unit()};
+ switch (which_) {
+ case Flush:
+ ext.FlushOutput(*this);
+#if !defined(RT_DEVICE_COMPILATION)
+ std::fflush(nullptr); // flushes C stdio output streams (12.9(2))
+#endif
+ break;
+ case Backspace:
+ ext.BackspaceRecord(*this);
+ break;
+ case Endfile:
+ ext.Endfile(*this);
+ break;
+ case Rewind:
+ ext.Rewind(*this);
+ break;
+ case Wait:
+ break; // handled in io-api.cpp BeginWait
+ }
+ return IoStatementBase::CompleteOperation();
+}
+
+int ExternalMiscIoStatementState::EndIoStatement() {
+ CompleteOperation();
+ return ExternalIoStatementBase::EndIoStatement();
+}
+
+InquireUnitState::InquireUnitState(
+ ExternalFileUnit &unit, const char *sourceFile, int sourceLine)
+ : ExternalIoStatementBase{unit, sourceFile, sourceLine} {}
+
+bool InquireUnitState::Inquire(
+ InquiryKeywordHash inquiry, char *result, std::size_t length) {
+ if (unit().createdForInternalChildIo()) {
+ SignalError(IostatInquireInternalUnit,
+ "INQUIRE of unit created for defined derived type I/O of an internal "
+ "unit");
+ return false;
+ }
+ const char *str{nullptr};
+ switch (inquiry) {
+ case HashInquiryKeyword("ACCESS"):
+ if (!unit().IsConnected()) {
+ str = "UNDEFINED";
+ } else {
+ switch (unit().access) {
+ case Access::Sequential:
+ str = "SEQUENTIAL";
+ break;
+ case Access::Direct:
+ str = "DIRECT";
+ break;
+ case Access::Stream:
+ str = "STREAM";
+ break;
+ }
+ }
+ break;
+ case HashInquiryKeyword("ACTION"):
+ str = !unit().IsConnected() ? "UNDEFINED"
+ : unit().mayWrite() ? unit().mayRead() ? "READWRITE" : "WRITE"
+ : "READ";
+ break;
+ case HashInquiryKeyword("ASYNCHRONOUS"):
+ str = !unit().IsConnected() ? "UNDEFINED"
+ : unit().mayAsynchronous() ? "YES"
+ : "NO";
+ break;
+ case HashInquiryKeyword("BLANK"):
+ str = !unit().IsConnected() || unit().isUnformatted.value_or(true)
+ ? "UNDEFINED"
+ : mutableModes().editingFlags & blankZero ? "ZERO"
+ : "NULL";
+ break;
+ case HashInquiryKeyword("CARRIAGECONTROL"):
+ str = "LIST";
+ break;
+ case HashInquiryKeyword("CONVERT"):
+ str = unit().swapEndianness() ? "SWAP" : "NATIVE";
+ break;
+ case HashInquiryKeyword("DECIMAL"):
+ str = !unit().IsConnected() || unit().isUnformatted.value_or(true)
+ ? "UNDEFINED"
+ : mutableModes().editingFlags & decimalComma ? "COMMA"
+ : "POINT";
+ break;
+ case HashInquiryKeyword("DELIM"):
+ if (!unit().IsConnected() || unit().isUnformatted.value_or(true)) {
+ str = "UNDEFINED";
+ } else {
+ switch (mutableModes().delim) {
+ case '\'':
+ str = "APOSTROPHE";
+ break;
+ case '"':
+ str = "QUOTE";
+ break;
+ default:
+ str = "NONE";
+ break;
+ }
+ }
+ break;
+ case HashInquiryKeyword("DIRECT"):
+ str = !unit().IsConnected() ? "UNKNOWN"
+ : unit().access == Access::Direct ||
+ (unit().mayPosition() && unit().openRecl)
+ ? "YES"
+ : "NO";
+ break;
+ case HashInquiryKeyword("ENCODING"):
+ str = !unit().IsConnected() ? "UNKNOWN"
+ : unit().isUnformatted.value_or(true) ? "UNDEFINED"
+ : unit().isUTF8 ? "UTF-8"
+ : "ASCII";
+ break;
+ case HashInquiryKeyword("FORM"):
+ str = !unit().IsConnected() || !unit().isUnformatted ? "UNDEFINED"
+ : *unit().isUnformatted ? "UNFORMATTED"
+ : "FORMATTED";
+ break;
+ case HashInquiryKeyword("FORMATTED"):
+ str = !unit().IsConnected() ? "UNDEFINED"
+ : !unit().isUnformatted ? "UNKNOWN"
+ : *unit().isUnformatted ? "NO"
+ : "YES";
+ break;
+ case HashInquiryKeyword("NAME"):
+ str = unit().path();
+ if (!str) {
+ return true; // result is undefined
+ }
+ break;
+ case HashInquiryKeyword("PAD"):
+ str = !unit().IsConnected() || unit().isUnformatted.value_or(true)
+ ? "UNDEFINED"
+ : mutableModes().pad ? "YES"
+ : "NO";
+ break;
+ case HashInquiryKeyword("POSITION"):
+ if (!unit().IsConnected() || unit().access == Access::Direct) {
+ str = "UNDEFINED";
+ } else {
+ switch (unit().InquirePosition()) {
+ case Position::Rewind:
+ str = "REWIND";
+ break;
+ case Position::Append:
+ str = "APPEND";
+ break;
+ case Position::AsIs:
+ str = "ASIS";
+ break;
+ }
+ }
+ break;
+ case HashInquiryKeyword("READ"):
+ str = !unit().IsConnected() ? "UNDEFINED" : unit().mayRead() ? "YES" : "NO";
+ break;
+ case HashInquiryKeyword("READWRITE"):
+ str = !unit().IsConnected() ? "UNDEFINED"
+ : unit().mayRead() && unit().mayWrite() ? "YES"
+ : "NO";
+ break;
+ case HashInquiryKeyword("ROUND"):
+ if (!unit().IsConnected() || unit().isUnformatted.value_or(true)) {
+ str = "UNDEFINED";
+ } else {
+ switch (mutableModes().round) {
+ case decimal::FortranRounding::RoundNearest:
+ str = "NEAREST";
+ break;
+ case decimal::FortranRounding::RoundUp:
+ str = "UP";
+ break;
+ case decimal::FortranRounding::RoundDown:
+ str = "DOWN";
+ break;
+ case decimal::FortranRounding::RoundToZero:
+ str = "ZERO";
+ break;
+ case decimal::FortranRounding::RoundCompatible:
+ str = "COMPATIBLE";
+ break;
+ }
+ }
+ break;
+ case HashInquiryKeyword("SEQUENTIAL"):
+ // "NO" for Direct, since Sequential would not work if
+ // the unit were reopened without RECL=.
+ str = !unit().IsConnected() ? "UNKNOWN"
+ : unit().access == Access::Sequential ? "YES"
+ : "NO";
+ break;
+ case HashInquiryKeyword("SIGN"):
+ str = !unit().IsConnected() || unit().isUnformatted.value_or(true)
+ ? "UNDEFINED"
+ : mutableModes().editingFlags & signPlus ? "PLUS"
+ : "SUPPRESS";
+ break;
+ case HashInquiryKeyword("STREAM"):
+ str = !unit().IsConnected() ? "UNKNOWN"
+ : unit().access == Access::Stream ? "YES"
+ : "NO";
+ break;
+ case HashInquiryKeyword("UNFORMATTED"):
+ str = !unit().IsConnected() || !unit().isUnformatted ? "UNKNOWN"
+ : *unit().isUnformatted ? "YES"
+ : "NO";
+ break;
+ case HashInquiryKeyword("WRITE"):
+ str = !unit().IsConnected() ? "UNKNOWN" : unit().mayWrite() ? "YES" : "NO";
+ break;
+ }
+ if (str) {
+ ToFortranDefaultCharacter(result, length, str);
+ return true;
+ } else {
+ BadInquiryKeywordHashCrash(inquiry);
+ return false;
+ }
+}
+
+bool InquireUnitState::Inquire(InquiryKeywordHash inquiry, bool &result) {
+ switch (inquiry) {
+ case HashInquiryKeyword("EXIST"):
+ result = true;
+ return true;
+ case HashInquiryKeyword("NAMED"):
+ result = unit().path() != nullptr;
+ return true;
+ case HashInquiryKeyword("OPENED"):
+ result = unit().IsConnected();
+ return true;
+ case HashInquiryKeyword("PENDING"):
+ result = false; // asynchronous I/O is not implemented
+ return true;
+ default:
+ BadInquiryKeywordHashCrash(inquiry);
+ return false;
+ }
+}
+
+bool InquireUnitState::Inquire(
+ InquiryKeywordHash inquiry, std::int64_t, bool &result) {
+ switch (inquiry) {
+ case HashInquiryKeyword("PENDING"):
+ result = false; // asynchronous I/O is not implemented
+ return true;
+ default:
+ BadInquiryKeywordHashCrash(inquiry);
+ return false;
+ }
+}
+
+bool InquireUnitState::Inquire(
+ InquiryKeywordHash inquiry, std::int64_t &result) {
+ switch (inquiry) {
+ case HashInquiryKeyword("NEXTREC"):
+ if (unit().access == Access::Direct) {
+ result = unit().currentRecordNumber;
+ }
+ return true;
+ case HashInquiryKeyword("NUMBER"):
+ result = unit().unitNumber();
+ return true;
+ case HashInquiryKeyword("POS"):
+ result = unit().InquirePos();
+ return true;
+ case HashInquiryKeyword("RECL"):
+ if (!unit().IsConnected()) {
+ result = -1;
+ } else if (unit().access == Access::Stream) {
+ result = -2;
+ } else if (unit().openRecl) {
+ result = *unit().openRecl;
+ } else {
+ result = std::numeric_limits<std::int32_t>::max();
+ }
+ return true;
+ case HashInquiryKeyword("SIZE"):
+ result = -1;
+ if (unit().IsConnected()) {
+ unit().FlushOutput(*this);
+ if (auto size{unit().knownSize()}) {
+ result = *size;
+ }
+ }
+ return true;
+ default:
+ BadInquiryKeywordHashCrash(inquiry);
+ return false;
+ }
+}
+
+InquireNoUnitState::InquireNoUnitState(
+ const char *sourceFile, int sourceLine, int badUnitNumber)
+ : NoUnitIoStatementState{*this, sourceFile, sourceLine, badUnitNumber} {}
+
+bool InquireNoUnitState::Inquire(
+ InquiryKeywordHash inquiry, char *result, std::size_t length) {
+ switch (inquiry) {
+ case HashInquiryKeyword("ACCESS"):
+ case HashInquiryKeyword("ACTION"):
+ case HashInquiryKeyword("ASYNCHRONOUS"):
+ case HashInquiryKeyword("BLANK"):
+ case HashInquiryKeyword("CARRIAGECONTROL"):
+ case HashInquiryKeyword("CONVERT"):
+ case HashInquiryKeyword("DECIMAL"):
+ case HashInquiryKeyword("DELIM"):
+ case HashInquiryKeyword("FORM"):
+ case HashInquiryKeyword("NAME"):
+ case HashInquiryKeyword("PAD"):
+ case HashInquiryKeyword("POSITION"):
+ case HashInquiryKeyword("ROUND"):
+ case HashInquiryKeyword("SIGN"):
+ ToFortranDefaultCharacter(result, length, "UNDEFINED");
+ return true;
+ case HashInquiryKeyword("DIRECT"):
+ case HashInquiryKeyword("ENCODING"):
+ case HashInquiryKeyword("FORMATTED"):
+ case HashInquiryKeyword("READ"):
+ case HashInquiryKeyword("READWRITE"):
+ case HashInquiryKeyword("SEQUENTIAL"):
+ case HashInquiryKeyword("STREAM"):
+ case HashInquiryKeyword("WRITE"):
+ case HashInquiryKeyword("UNFORMATTED"):
+ ToFortranDefaultCharacter(result, length, "UNKNOWN");
+ return true;
+ default:
+ BadInquiryKeywordHashCrash(inquiry);
+ return false;
+ }
+}
+
+bool InquireNoUnitState::Inquire(InquiryKeywordHash inquiry, bool &result) {
+ switch (inquiry) {
+ case HashInquiryKeyword("EXIST"):
+ result = badUnitNumber() >= 0;
+ return true;
+ case HashInquiryKeyword("NAMED"):
+ case HashInquiryKeyword("OPENED"):
+ case HashInquiryKeyword("PENDING"):
+ result = false;
+ return true;
+ default:
+ BadInquiryKeywordHashCrash(inquiry);
+ return false;
+ }
+}
+
+bool InquireNoUnitState::Inquire(
+ InquiryKeywordHash inquiry, std::int64_t, bool &result) {
+ switch (inquiry) {
+ case HashInquiryKeyword("PENDING"):
+ result = false;
+ return true;
+ default:
+ BadInquiryKeywordHashCrash(inquiry);
+ return false;
+ }
+}
+
+bool InquireNoUnitState::Inquire(
+ InquiryKeywordHash inquiry, std::int64_t &result) {
+ switch (inquiry) {
+ case HashInquiryKeyword("NUMBER"):
+ result = badUnitNumber();
+ return true;
+ case HashInquiryKeyword("NEXTREC"):
+ case HashInquiryKeyword("POS"):
+ case HashInquiryKeyword("RECL"):
+ case HashInquiryKeyword("SIZE"):
+ result = -1;
+ return true;
+ default:
+ BadInquiryKeywordHashCrash(inquiry);
+ return false;
+ }
+}
+
+InquireUnconnectedFileState::InquireUnconnectedFileState(
+ OwningPtr<char> &&path, const char *sourceFile, int sourceLine)
+ : NoUnitIoStatementState{*this, sourceFile, sourceLine}, path_{std::move(
+ path)} {}
+
+bool InquireUnconnectedFileState::Inquire(
+ InquiryKeywordHash inquiry, char *result, std::size_t length) {
+ const char *str{nullptr};
+ switch (inquiry) {
+ case HashInquiryKeyword("ACCESS"):
+ case HashInquiryKeyword("ACTION"):
+ case HashInquiryKeyword("ASYNCHRONOUS"):
+ case HashInquiryKeyword("BLANK"):
+ case HashInquiryKeyword("CARRIAGECONTROL"):
+ case HashInquiryKeyword("CONVERT"):
+ case HashInquiryKeyword("DECIMAL"):
+ case HashInquiryKeyword("DELIM"):
+ case HashInquiryKeyword("FORM"):
+ case HashInquiryKeyword("PAD"):
+ case HashInquiryKeyword("POSITION"):
+ case HashInquiryKeyword("ROUND"):
+ case HashInquiryKeyword("SIGN"):
+ str = "UNDEFINED";
+ break;
+ case HashInquiryKeyword("DIRECT"):
+ case HashInquiryKeyword("ENCODING"):
+ case HashInquiryKeyword("FORMATTED"):
+ case HashInquiryKeyword("SEQUENTIAL"):
+ case HashInquiryKeyword("STREAM"):
+ case HashInquiryKeyword("UNFORMATTED"):
+ str = "UNKNOWN";
+ break;
+ case HashInquiryKeyword("READ"):
+ str =
+ IsExtant(path_.get()) ? MayRead(path_.get()) ? "YES" : "NO" : "UNKNOWN";
+ break;
+ case HashInquiryKeyword("READWRITE"):
+ str = IsExtant(path_.get()) ? MayReadAndWrite(path_.get()) ? "YES" : "NO"
+ : "UNKNOWN";
+ break;
+ case HashInquiryKeyword("WRITE"):
+ str = IsExtant(path_.get()) ? MayWrite(path_.get()) ? "YES" : "NO"
+ : "UNKNOWN";
+ break;
+ case HashInquiryKeyword("NAME"):
+ str = path_.get();
+ if (!str) {
+ return true; // result is undefined
+ }
+ break;
+ }
+ if (str) {
+ ToFortranDefaultCharacter(result, length, str);
+ return true;
+ } else {
+ BadInquiryKeywordHashCrash(inquiry);
+ return false;
+ }
+}
+
+bool InquireUnconnectedFileState::Inquire(
+ InquiryKeywordHash inquiry, bool &result) {
+ switch (inquiry) {
+ case HashInquiryKeyword("EXIST"):
+ result = IsExtant(path_.get());
+ return true;
+ case HashInquiryKeyword("NAMED"):
+ result = true;
+ return true;
+ case HashInquiryKeyword("OPENED"):
+ result = false;
+ return true;
+ case HashInquiryKeyword("PENDING"):
+ result = false;
+ return true;
+ default:
+ BadInquiryKeywordHashCrash(inquiry);
+ return false;
+ }
+}
+
+bool InquireUnconnectedFileState::Inquire(
+ InquiryKeywordHash inquiry, std::int64_t, bool &result) {
+ switch (inquiry) {
+ case HashInquiryKeyword("PENDING"):
+ result = false;
+ return true;
+ default:
+ BadInquiryKeywordHashCrash(inquiry);
+ return false;
+ }
+}
+
+bool InquireUnconnectedFileState::Inquire(
+ InquiryKeywordHash inquiry, std::int64_t &result) {
+ switch (inquiry) {
+ case HashInquiryKeyword("NEXTREC"):
+ case HashInquiryKeyword("NUMBER"):
+ case HashInquiryKeyword("POS"):
+ case HashInquiryKeyword("RECL"):
+ result = -1;
+ return true;
+ case HashInquiryKeyword("SIZE"):
+ result = SizeInBytes(path_.get());
+ return true;
+ default:
+ BadInquiryKeywordHashCrash(inquiry);
+ return false;
+ }
+}
+
+InquireIOLengthState::InquireIOLengthState(
+ const char *sourceFile, int sourceLine)
+ : NoUnitIoStatementState{*this, sourceFile, sourceLine} {}
+
+bool InquireIOLengthState::Emit(const char *, std::size_t bytes, std::size_t) {
+ bytes_ += bytes;
+ return true;
+}
+
+int ErroneousIoStatementState::EndIoStatement() {
+ SignalPendingError();
+ if (unit_) {
+ unit_->EndIoStatement();
+ }
+ return IoStatementBase::EndIoStatement();
+}
+
+RT_OFFLOAD_API_GROUP_END
+} // namespace Fortran::runtime::io
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/iostat.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/iostat.cpp
new file mode 100644
index 00000000000..0f8bfb884e5
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/iostat.cpp
@@ -0,0 +1,129 @@
+//===-- lib/runtime/iostat.cpp ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang/Runtime/iostat.h"
+
+namespace Fortran::runtime::io {
+RT_OFFLOAD_API_GROUP_BEGIN
+
+const char *IostatErrorString(int iostat) {
+ switch (iostat) {
+ case IostatOk:
+ return "No error";
+ case IostatEnd:
+ return "End of file during input";
+ case IostatEor:
+ return "End of record during non-advancing input";
+ case IostatUnflushable:
+ return "FLUSH not possible";
+ case IostatInquireInternalUnit:
+ return "INQUIRE on internal unit";
+ case IostatGenericError:
+ return "I/O error"; // dummy value, there's always a message
+ case IostatRecordWriteOverrun:
+ return "Excessive output to fixed-size record";
+ case IostatRecordReadOverrun:
+ return "Excessive input from fixed-size record";
+ case IostatInternalWriteOverrun:
+ return "Internal write overran available records";
+ case IostatErrorInFormat:
+ return "Bad FORMAT";
+ case IostatErrorInKeyword:
+ return "Bad keyword argument value";
+ case IostatEndfileDirect:
+ return "ENDFILE on direct-access file";
+ case IostatEndfileUnwritable:
+ return "ENDFILE on read-only file";
+ case IostatOpenBadRecl:
+ return "OPEN with bad RECL= value";
+ case IostatOpenUnknownSize:
+ return "OPEN of file of unknown size";
+ case IostatOpenBadAppend:
+ return "OPEN(POSITION='APPEND') of unpositionable file";
+ case IostatWriteToReadOnly:
+ return "Attempted output to read-only file";
+ case IostatReadFromWriteOnly:
+ return "Attempted input from write-only file";
+ case IostatBackspaceNonSequential:
+ return "BACKSPACE on non-sequential file";
+ case IostatBackspaceAtFirstRecord:
+ return "BACKSPACE at first record";
+ case IostatRewindNonSequential:
+ return "REWIND on non-sequential file";
+ case IostatWriteAfterEndfile:
+ return "WRITE after ENDFILE";
+ case IostatFormattedIoOnUnformattedUnit:
+ return "Formatted I/O on unformatted file";
+ case IostatUnformattedIoOnFormattedUnit:
+ return "Unformatted I/O on formatted file";
+ case IostatListIoOnDirectAccessUnit:
+ return "List-directed or NAMELIST I/O on direct-access file";
+ case IostatUnformattedChildOnFormattedParent:
+ return "Unformatted child I/O on formatted parent unit";
+ case IostatFormattedChildOnUnformattedParent:
+ return "Formatted child I/O on unformatted parent unit";
+ case IostatChildInputFromOutputParent:
+ return "Child input from output parent unit";
+ case IostatChildOutputToInputParent:
+ return "Child output to input parent unit";
+ case IostatShortRead:
+ return "Read from external unit returned insufficient data";
+ case IostatMissingTerminator:
+ return "Sequential record missing its terminator";
+ case IostatBadUnformattedRecord:
+ return "Erroneous unformatted sequential file record structure";
+ case IostatUTF8Decoding:
+ return "UTF-8 decoding error";
+ case IostatUnitOverflow:
+ return "UNIT number is out of range";
+ case IostatBadRealInput:
+ return "Bad REAL input value";
+ case IostatBadScaleFactor:
+ return "Bad REAL output scale factor (kP)";
+ case IostatBadAsynchronous:
+ return "READ/WRITE(ASYNCHRONOUS='YES') on unit without "
+ "OPEN(ASYNCHRONOUS='YES')";
+ case IostatBadWaitUnit:
+ return "WAIT(UNIT=) for a bad or unconnected unit number";
+ case IostatBOZInputOverflow:
+ return "B/O/Z input value overflows variable";
+ case IostatIntegerInputOverflow:
+ return "Integer input value overflows variable";
+ case IostatRealInputOverflow:
+ return "Real or complex input value overflows type";
+ case IostatCannotReposition:
+ return "Attempt to reposition a unit which is connected to a file that can "
+ "only be processed sequentially";
+ case IostatOpenAlreadyConnected:
+ return "OPEN of file already connected to another unit";
+ case IostatBadWaitId:
+ return "WAIT(ID=nonzero) for an ID value that is not a pending operation";
+ case IostatTooManyAsyncOps:
+ return "Too many asynchronous operations pending on unit";
+ case IostatBadBackspaceUnit:
+ return "BACKSPACE on unconnected unit";
+ case IostatBadUnitNumber:
+ return "Negative unit number is not allowed";
+ case IostatBadFlushUnit:
+ return "FLUSH attempted on a bad or unconnected unit number";
+ case IostatBadOpOnChildUnit:
+ return "Impermissible I/O statement on child I/O unit";
+ case IostatBadNewUnit:
+ return "NEWUNIT= without FILE= or STATUS='SCRATCH'";
+ case IostatBadListDirectedInputSeparator:
+ return "List-directed input value has trailing unused characters";
+ case IostatNonExternalDefinedUnformattedIo:
+ return "Defined unformatted I/O without an external unit";
+ default:
+ return nullptr;
+ }
+}
+
+RT_OFFLOAD_API_GROUP_END
+
+} // namespace Fortran::runtime::io
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/main.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/main.cpp
new file mode 100644
index 00000000000..b3f066cda37
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/main.cpp
@@ -0,0 +1,48 @@
+//===-- lib/runtime/main.cpp ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang/Runtime/main.h"
+#include "flang-rt/runtime/environment.h"
+#include "flang-rt/runtime/terminator.h"
+#include <cfenv>
+#include <cstdio>
+#include <cstdlib>
+
+static void ConfigureFloatingPoint() {
+#ifdef feclearexcept // a macro in some environments; omit std::
+ feclearexcept(FE_ALL_EXCEPT);
+#else
+ std::feclearexcept(FE_ALL_EXCEPT);
+#endif
+#ifdef fesetround
+ fesetround(FE_TONEAREST);
+#else
+ std::fesetround(FE_TONEAREST);
+#endif
+}
+
+extern "C" {
+void RTNAME(ProgramStart)(int argc, const char *argv[], const char *envp[],
+ const EnvironmentDefaultList *envDefaults) {
+ std::atexit(Fortran::runtime::NotifyOtherImagesOfNormalEnd);
+ Fortran::runtime::executionEnvironment.Configure(
+ argc, argv, envp, envDefaults);
+ ConfigureFloatingPoint();
+ // I/O is initialized on demand so that it works for non-Fortran main().
+}
+
+void RTNAME(ByteswapOption)() {
+ if (Fortran::runtime::executionEnvironment.conversion ==
+ Fortran::runtime::Convert::Unknown) {
+ // The environment variable overrides the command-line option;
+ // either of them take precedence over explicit OPEN(CONVERT=) specifiers.
+ Fortran::runtime::executionEnvironment.conversion =
+ Fortran::runtime::Convert::Swap;
+ }
+}
+}
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/matmul-transpose.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/matmul-transpose.cpp
new file mode 100644
index 00000000000..c9e21502b62
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/matmul-transpose.cpp
@@ -0,0 +1,381 @@
+//===-- lib/runtime/matmul-transpose.cpp ------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Implements a fused matmul-transpose operation
+//
+// There are two main entry points; one establishes a descriptor for the
+// result and allocates it, and the other expects a result descriptor that
+// points to existing storage.
+//
+// This implementation must handle all combinations of numeric types and
+// kinds (100 - 165 cases depending on the target), plus all combinations
+// of logical kinds (16). A single template undergoes many instantiations
+// to cover all of the valid possibilities.
+//
+// The usefulness of this optimization should be reviewed once Matmul is swapped
+// to use the faster BLAS routines.
+
+#include "flang/Runtime/matmul-transpose.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+#include "flang/Common/optional.h"
+#include "flang/Runtime/c-or-cpp.h"
+#include "flang/Runtime/cpp-type.h"
+#include <cstring>
+
+namespace {
+using namespace Fortran::runtime;
+
+// Contiguous numeric TRANSPOSE(matrix)*matrix multiplication
+// TRANSPOSE(matrix(n, rows)) * matrix(n,cols) ->
+// matrix(rows, n) * matrix(n,cols) -> matrix(rows,cols)
+// The transpose is implemented by swapping the indices of accesses into the LHS
+//
+// Straightforward algorithm:
+// DO 1 I = 1, NROWS
+// DO 1 J = 1, NCOLS
+// RES(I,J) = 0
+// DO 1 K = 1, N
+// 1 RES(I,J) = RES(I,J) + X(K,I)*Y(K,J)
+//
+// With loop distribution and transposition to avoid the inner sum
+// reduction and to avoid non-unit strides:
+// DO 1 I = 1, NROWS
+// DO 1 J = 1, NCOLS
+// 1 RES(I,J) = 0
+// DO 2 J = 1, NCOLS
+// DO 2 I = 1, NROWS
+// DO 2 K = 1, N
+// 2 RES(I,J) = RES(I,J) + X(K,I)*Y(K,J) ! loop-invariant last term
+template <TypeCategory RCAT, int RKIND, typename XT, typename YT,
+ bool X_HAS_STRIDED_COLUMNS, bool Y_HAS_STRIDED_COLUMNS>
+inline static RT_API_ATTRS void MatrixTransposedTimesMatrix(
+ CppTypeFor<RCAT, RKIND> *RESTRICT product, SubscriptValue rows,
+ SubscriptValue cols, const XT *RESTRICT x, const YT *RESTRICT y,
+ SubscriptValue n, std::size_t xColumnByteStride = 0,
+ std::size_t yColumnByteStride = 0) {
+ using ResultType = CppTypeFor<RCAT, RKIND>;
+
+ std::memset(product, 0, rows * cols * sizeof *product);
+ for (SubscriptValue j{0}; j < cols; ++j) {
+ for (SubscriptValue i{0}; i < rows; ++i) {
+ for (SubscriptValue k{0}; k < n; ++k) {
+ ResultType x_ki;
+ if constexpr (!X_HAS_STRIDED_COLUMNS) {
+ x_ki = static_cast<ResultType>(x[i * n + k]);
+ } else {
+ x_ki = static_cast<ResultType>(reinterpret_cast<const XT *>(
+ reinterpret_cast<const char *>(x) + i * xColumnByteStride)[k]);
+ }
+ ResultType y_kj;
+ if constexpr (!Y_HAS_STRIDED_COLUMNS) {
+ y_kj = static_cast<ResultType>(y[j * n + k]);
+ } else {
+ y_kj = static_cast<ResultType>(reinterpret_cast<const YT *>(
+ reinterpret_cast<const char *>(y) + j * yColumnByteStride)[k]);
+ }
+ product[j * rows + i] += x_ki * y_kj;
+ }
+ }
+ }
+}
+
+template <TypeCategory RCAT, int RKIND, typename XT, typename YT>
+inline static RT_API_ATTRS void MatrixTransposedTimesMatrixHelper(
+ CppTypeFor<RCAT, RKIND> *RESTRICT product, SubscriptValue rows,
+ SubscriptValue cols, const XT *RESTRICT x, const YT *RESTRICT y,
+ SubscriptValue n, Fortran::common::optional<std::size_t> xColumnByteStride,
+ Fortran::common::optional<std::size_t> yColumnByteStride) {
+ if (!xColumnByteStride) {
+ if (!yColumnByteStride) {
+ MatrixTransposedTimesMatrix<RCAT, RKIND, XT, YT, false, false>(
+ product, rows, cols, x, y, n);
+ } else {
+ MatrixTransposedTimesMatrix<RCAT, RKIND, XT, YT, false, true>(
+ product, rows, cols, x, y, n, 0, *yColumnByteStride);
+ }
+ } else {
+ if (!yColumnByteStride) {
+ MatrixTransposedTimesMatrix<RCAT, RKIND, XT, YT, true, false>(
+ product, rows, cols, x, y, n, *xColumnByteStride);
+ } else {
+ MatrixTransposedTimesMatrix<RCAT, RKIND, XT, YT, true, true>(
+ product, rows, cols, x, y, n, *xColumnByteStride, *yColumnByteStride);
+ }
+ }
+}
+
+// Contiguous numeric matrix*vector multiplication
+// matrix(rows,n) * column vector(n) -> column vector(rows)
+// Straightforward algorithm:
+// DO 1 I = 1, NROWS
+// RES(I) = 0
+// DO 1 K = 1, N
+// 1 RES(I) = RES(I) + X(K,I)*Y(K)
+// With loop distribution and transposition to avoid the inner
+// sum reduction and to avoid non-unit strides:
+// DO 1 I = 1, NROWS
+// 1 RES(I) = 0
+// DO 2 I = 1, NROWS
+// DO 2 K = 1, N
+// 2 RES(I) = RES(I) + X(K,I)*Y(K)
+template <TypeCategory RCAT, int RKIND, typename XT, typename YT,
+ bool X_HAS_STRIDED_COLUMNS>
+inline static RT_API_ATTRS void MatrixTransposedTimesVector(
+ CppTypeFor<RCAT, RKIND> *RESTRICT product, SubscriptValue rows,
+ SubscriptValue n, const XT *RESTRICT x, const YT *RESTRICT y,
+ std::size_t xColumnByteStride = 0) {
+ using ResultType = CppTypeFor<RCAT, RKIND>;
+ std::memset(product, 0, rows * sizeof *product);
+ for (SubscriptValue i{0}; i < rows; ++i) {
+ for (SubscriptValue k{0}; k < n; ++k) {
+ ResultType x_ki;
+ if constexpr (!X_HAS_STRIDED_COLUMNS) {
+ x_ki = static_cast<ResultType>(x[i * n + k]);
+ } else {
+ x_ki = static_cast<ResultType>(reinterpret_cast<const XT *>(
+ reinterpret_cast<const char *>(x) + i * xColumnByteStride)[k]);
+ }
+ ResultType y_k = static_cast<ResultType>(y[k]);
+ product[i] += x_ki * y_k;
+ }
+ }
+}
+
+template <TypeCategory RCAT, int RKIND, typename XT, typename YT>
+inline static RT_API_ATTRS void MatrixTransposedTimesVectorHelper(
+ CppTypeFor<RCAT, RKIND> *RESTRICT product, SubscriptValue rows,
+ SubscriptValue n, const XT *RESTRICT x, const YT *RESTRICT y,
+ Fortran::common::optional<std::size_t> xColumnByteStride) {
+ if (!xColumnByteStride) {
+ MatrixTransposedTimesVector<RCAT, RKIND, XT, YT, false>(
+ product, rows, n, x, y);
+ } else {
+ MatrixTransposedTimesVector<RCAT, RKIND, XT, YT, true>(
+ product, rows, n, x, y, *xColumnByteStride);
+ }
+}
+
+// Implements an instance of MATMUL for given argument types.
+template <bool IS_ALLOCATING, TypeCategory RCAT, int RKIND, typename XT,
+ typename YT>
+inline static RT_API_ATTRS void DoMatmulTranspose(
+ std::conditional_t<IS_ALLOCATING, Descriptor, const Descriptor> &result,
+ const Descriptor &x, const Descriptor &y, Terminator &terminator) {
+ int xRank{x.rank()};
+ int yRank{y.rank()};
+ int resRank{xRank + yRank - 2};
+ if (xRank * yRank != 2 * resRank) {
+ terminator.Crash(
+ "MATMUL-TRANSPOSE: bad argument ranks (%d * %d)", xRank, yRank);
+ }
+ SubscriptValue extent[2]{x.GetDimension(1).Extent(),
+ resRank == 2 ? y.GetDimension(1).Extent() : 0};
+ if constexpr (IS_ALLOCATING) {
+ result.Establish(
+ RCAT, RKIND, nullptr, resRank, extent, CFI_attribute_allocatable);
+ for (int j{0}; j < resRank; ++j) {
+ result.GetDimension(j).SetBounds(1, extent[j]);
+ }
+ if (int stat{result.Allocate(kNoAsyncObject)}) {
+ terminator.Crash(
+ "MATMUL-TRANSPOSE: could not allocate memory for result; STAT=%d",
+ stat);
+ }
+ } else {
+ RUNTIME_CHECK(terminator, resRank == result.rank());
+ RUNTIME_CHECK(
+ terminator, result.ElementBytes() == static_cast<std::size_t>(RKIND));
+ RUNTIME_CHECK(terminator, result.GetDimension(0).Extent() == extent[0]);
+ RUNTIME_CHECK(terminator,
+ resRank == 1 || result.GetDimension(1).Extent() == extent[1]);
+ }
+ SubscriptValue n{x.GetDimension(0).Extent()};
+ if (n != y.GetDimension(0).Extent()) {
+ terminator.Crash(
+ "MATMUL-TRANSPOSE: unacceptable operand shapes (%jdx%jd, %jdx%jd)",
+ static_cast<std::intmax_t>(x.GetDimension(0).Extent()),
+ static_cast<std::intmax_t>(x.GetDimension(1).Extent()),
+ static_cast<std::intmax_t>(y.GetDimension(0).Extent()),
+ static_cast<std::intmax_t>(y.GetDimension(1).Extent()));
+ }
+ using WriteResult =
+ CppTypeFor<RCAT == TypeCategory::Logical ? TypeCategory::Integer : RCAT,
+ RKIND>;
+ const SubscriptValue rows{extent[0]};
+ const SubscriptValue cols{extent[1]};
+ if constexpr (RCAT != TypeCategory::Logical) {
+ if (x.IsContiguous(1) && y.IsContiguous(1) &&
+ (IS_ALLOCATING || result.IsContiguous())) {
+ // Contiguous numeric matrices (maybe with columns
+ // separated by a stride).
+ Fortran::common::optional<std::size_t> xColumnByteStride;
+ if (!x.IsContiguous()) {
+ // X's columns are strided.
+ SubscriptValue xAt[2]{};
+ x.GetLowerBounds(xAt);
+ xAt[1]++;
+ xColumnByteStride = x.SubscriptsToByteOffset(xAt);
+ }
+ Fortran::common::optional<std::size_t> yColumnByteStride;
+ if (!y.IsContiguous()) {
+ // Y's columns are strided.
+ SubscriptValue yAt[2]{};
+ y.GetLowerBounds(yAt);
+ yAt[1]++;
+ yColumnByteStride = y.SubscriptsToByteOffset(yAt);
+ }
+ if (resRank == 2) { // M*M -> M
+ // TODO: use BLAS-3 GEMM for supported types.
+ MatrixTransposedTimesMatrixHelper<RCAT, RKIND, XT, YT>(
+ result.template OffsetElement<WriteResult>(), rows, cols,
+ x.OffsetElement<XT>(), y.OffsetElement<YT>(), n, xColumnByteStride,
+ yColumnByteStride);
+ return;
+ }
+ if (xRank == 2) { // M*V -> V
+ // TODO: use BLAS-2 GEMM for supported types.
+ MatrixTransposedTimesVectorHelper<RCAT, RKIND, XT, YT>(
+ result.template OffsetElement<WriteResult>(), rows, n,
+ x.OffsetElement<XT>(), y.OffsetElement<YT>(), xColumnByteStride);
+ return;
+ }
+ // else V*M -> V (not allowed because TRANSPOSE() is only defined for rank
+ // 1 matrices
+ terminator.Crash(
+ "MATMUL-TRANSPOSE: unacceptable operand shapes (%jdx%jd, %jdx%jd)",
+ static_cast<std::intmax_t>(x.GetDimension(0).Extent()),
+ static_cast<std::intmax_t>(n),
+ static_cast<std::intmax_t>(y.GetDimension(0).Extent()),
+ static_cast<std::intmax_t>(y.GetDimension(1).Extent()));
+ return;
+ }
+ }
+ // General algorithms for LOGICAL and noncontiguity
+ SubscriptValue xLB[2], yLB[2], resLB[2];
+ x.GetLowerBounds(xLB);
+ y.GetLowerBounds(yLB);
+ result.GetLowerBounds(resLB);
+ using ResultType = CppTypeFor<RCAT, RKIND>;
+ if (resRank == 2) { // M*M -> M
+ for (SubscriptValue i{0}; i < rows; ++i) {
+ for (SubscriptValue j{0}; j < cols; ++j) {
+ ResultType res_ij;
+ if constexpr (RCAT == TypeCategory::Logical) {
+ res_ij = false;
+ } else {
+ res_ij = 0;
+ }
+
+ for (SubscriptValue k{0}; k < n; ++k) {
+ SubscriptValue xAt[2]{k + xLB[0], i + xLB[1]};
+ SubscriptValue yAt[2]{k + yLB[0], j + yLB[1]};
+ if constexpr (RCAT == TypeCategory::Logical) {
+ ResultType x_ki = IsLogicalElementTrue(x, xAt);
+ ResultType y_kj = IsLogicalElementTrue(y, yAt);
+ res_ij = res_ij || (x_ki && y_kj);
+ } else {
+ ResultType x_ki = static_cast<ResultType>(*x.Element<XT>(xAt));
+ ResultType y_kj = static_cast<ResultType>(*y.Element<YT>(yAt));
+ res_ij += x_ki * y_kj;
+ }
+ }
+ SubscriptValue resAt[2]{i + resLB[0], j + resLB[1]};
+ *result.template Element<WriteResult>(resAt) = res_ij;
+ }
+ }
+ } else if (xRank == 2) { // M*V -> V
+ for (SubscriptValue i{0}; i < rows; ++i) {
+ ResultType res_i;
+ if constexpr (RCAT == TypeCategory::Logical) {
+ res_i = false;
+ } else {
+ res_i = 0;
+ }
+
+ for (SubscriptValue k{0}; k < n; ++k) {
+ SubscriptValue xAt[2]{k + xLB[0], i + xLB[1]};
+ SubscriptValue yAt[1]{k + yLB[0]};
+ if constexpr (RCAT == TypeCategory::Logical) {
+ ResultType x_ki = IsLogicalElementTrue(x, xAt);
+ ResultType y_k = IsLogicalElementTrue(y, yAt);
+ res_i = res_i || (x_ki && y_k);
+ } else {
+ ResultType x_ki = static_cast<ResultType>(*x.Element<XT>(xAt));
+ ResultType y_k = static_cast<ResultType>(*y.Element<YT>(yAt));
+ res_i += x_ki * y_k;
+ }
+ }
+ SubscriptValue resAt[1]{i + resLB[0]};
+ *result.template Element<WriteResult>(resAt) = res_i;
+ }
+ } else { // V*M -> V
+ // TRANSPOSE(V) not allowed by fortran standard
+ terminator.Crash(
+ "MATMUL-TRANSPOSE: unacceptable operand shapes (%jdx%jd, %jdx%jd)",
+ static_cast<std::intmax_t>(x.GetDimension(0).Extent()),
+ static_cast<std::intmax_t>(n),
+ static_cast<std::intmax_t>(y.GetDimension(0).Extent()),
+ static_cast<std::intmax_t>(y.GetDimension(1).Extent()));
+ }
+}
+
+template <bool IS_ALLOCATING, TypeCategory XCAT, int XKIND, TypeCategory YCAT,
+ int YKIND>
+struct MatmulTransposeHelper {
+ using ResultDescriptor =
+ std::conditional_t<IS_ALLOCATING, Descriptor, const Descriptor>;
+ using ResultTy = Fortran::common::optional<std::pair<TypeCategory, int>>;
+ RT_API_ATTRS void operator()(ResultDescriptor &result, const Descriptor &x,
+ const Descriptor &y, const char *sourceFile, int line) const {
+ Terminator terminator{sourceFile, line};
+ auto xCatKind{x.type().GetCategoryAndKind()};
+ auto yCatKind{y.type().GetCategoryAndKind()};
+ RUNTIME_CHECK(terminator, xCatKind.has_value() && yCatKind.has_value());
+ RUNTIME_CHECK(terminator, xCatKind->first == XCAT);
+ RUNTIME_CHECK(terminator, yCatKind->first == YCAT);
+ if constexpr (constexpr ResultTy resultType{
+ GetResultType(XCAT, XKIND, YCAT, YKIND)}) {
+ return DoMatmulTranspose<IS_ALLOCATING, resultType->first,
+ resultType->second, CppTypeFor<XCAT, XKIND>, CppTypeFor<YCAT, YKIND>>(
+ result, x, y, terminator);
+ }
+ terminator.Crash("MATMUL-TRANSPOSE: bad operand types (%d(%d), %d(%d))",
+ static_cast<int>(XCAT), XKIND, static_cast<int>(YCAT), YKIND);
+ }
+};
+} // namespace
+
+namespace Fortran::runtime {
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+#define MATMUL_INSTANCE(XCAT, XKIND, YCAT, YKIND) \
+ void RTDEF(MatmulTranspose##XCAT##XKIND##YCAT##YKIND)(Descriptor & result, \
+ const Descriptor &x, const Descriptor &y, const char *sourceFile, \
+ int line) { \
+ MatmulTransposeHelper<true, TypeCategory::XCAT, XKIND, TypeCategory::YCAT, \
+ YKIND>{}(result, x, y, sourceFile, line); \
+ }
+
+#define MATMUL_DIRECT_INSTANCE(XCAT, XKIND, YCAT, YKIND) \
+ void RTDEF(MatmulTransposeDirect##XCAT##XKIND##YCAT##YKIND)( \
+ Descriptor & result, const Descriptor &x, const Descriptor &y, \
+ const char *sourceFile, int line) { \
+ MatmulTransposeHelper<false, TypeCategory::XCAT, XKIND, \
+ TypeCategory::YCAT, YKIND>{}(result, x, y, sourceFile, line); \
+ }
+
+#define MATMUL_FORCE_ALL_TYPES 0
+
+#include "flang/Runtime/matmul-instances.inc"
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/matmul.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/matmul.cpp
new file mode 100644
index 00000000000..5acb3457252
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/matmul.cpp
@@ -0,0 +1,481 @@
+//===-- lib/runtime/matmul.cpp ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Implements all forms of MATMUL (Fortran 2018 16.9.124)
+//
+// There are two main entry points; one establishes a descriptor for the
+// result and allocates it, and the other expects a result descriptor that
+// points to existing storage.
+//
+// This implementation must handle all combinations of numeric types and
+// kinds (100 - 165 cases depending on the target), plus all combinations
+// of logical kinds (16). A single template undergoes many instantiations
+// to cover all of the valid possibilities.
+//
+// Places where BLAS routines could be called are marked as TODO items.
+
+#include "flang/Runtime/matmul.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+#include "flang/Common/optional.h"
+#include "flang/Runtime/c-or-cpp.h"
+#include "flang/Runtime/cpp-type.h"
+#include <cstring>
+
+namespace {
+using namespace Fortran::runtime;
+
+// General accumulator for any type and stride; this is not used for
+// contiguous numeric cases.
+template <TypeCategory RCAT, int RKIND, typename XT, typename YT>
+class Accumulator {
+public:
+ using Result = AccumulationType<RCAT, RKIND>;
+ RT_API_ATTRS Accumulator(const Descriptor &x, const Descriptor &y)
+ : x_{x}, y_{y} {}
+ RT_API_ATTRS void Accumulate(
+ const SubscriptValue xAt[], const SubscriptValue yAt[]) {
+ if constexpr (RCAT == TypeCategory::Logical) {
+ sum_ = sum_ ||
+ (IsLogicalElementTrue(x_, xAt) && IsLogicalElementTrue(y_, yAt));
+ } else {
+ sum_ += static_cast<Result>(*x_.Element<XT>(xAt)) *
+ static_cast<Result>(*y_.Element<YT>(yAt));
+ }
+ }
+ RT_API_ATTRS Result GetResult() const { return sum_; }
+
+private:
+ const Descriptor &x_, &y_;
+ Result sum_{};
+};
+
+// Contiguous numeric matrix*matrix multiplication
+// matrix(rows,n) * matrix(n,cols) -> matrix(rows,cols)
+// Straightforward algorithm:
+// DO 1 I = 1, NROWS
+// DO 1 J = 1, NCOLS
+// RES(I,J) = 0
+// DO 1 K = 1, N
+// 1 RES(I,J) = RES(I,J) + X(I,K)*Y(K,J)
+// With loop distribution and transposition to avoid the inner sum
+// reduction and to avoid non-unit strides:
+// DO 1 I = 1, NROWS
+// DO 1 J = 1, NCOLS
+// 1 RES(I,J) = 0
+// DO 2 K = 1, N
+// DO 2 J = 1, NCOLS
+// DO 2 I = 1, NROWS
+// 2 RES(I,J) = RES(I,J) + X(I,K)*Y(K,J) ! loop-invariant last term
+template <TypeCategory RCAT, int RKIND, typename XT, typename YT,
+ bool X_HAS_STRIDED_COLUMNS, bool Y_HAS_STRIDED_COLUMNS>
+inline RT_API_ATTRS void MatrixTimesMatrix(
+ CppTypeFor<RCAT, RKIND> *RESTRICT product, SubscriptValue rows,
+ SubscriptValue cols, const XT *RESTRICT x, const YT *RESTRICT y,
+ SubscriptValue n, std::size_t xColumnByteStride = 0,
+ std::size_t yColumnByteStride = 0) {
+ using ResultType = CppTypeFor<RCAT, RKIND>;
+ std::memset(product, 0, rows * cols * sizeof *product);
+ const XT *RESTRICT xp0{x};
+ for (SubscriptValue k{0}; k < n; ++k) {
+ ResultType *RESTRICT p{product};
+ for (SubscriptValue j{0}; j < cols; ++j) {
+ const XT *RESTRICT xp{xp0};
+ ResultType yv;
+ if constexpr (!Y_HAS_STRIDED_COLUMNS) {
+ yv = static_cast<ResultType>(y[k + j * n]);
+ } else {
+ yv = static_cast<ResultType>(reinterpret_cast<const YT *>(
+ reinterpret_cast<const char *>(y) + j * yColumnByteStride)[k]);
+ }
+ for (SubscriptValue i{0}; i < rows; ++i) {
+ *p++ += static_cast<ResultType>(*xp++) * yv;
+ }
+ }
+ if constexpr (!X_HAS_STRIDED_COLUMNS) {
+ xp0 += rows;
+ } else {
+ xp0 = reinterpret_cast<const XT *>(
+ reinterpret_cast<const char *>(xp0) + xColumnByteStride);
+ }
+ }
+}
+
+template <TypeCategory RCAT, int RKIND, typename XT, typename YT>
+inline RT_API_ATTRS void MatrixTimesMatrixHelper(
+ CppTypeFor<RCAT, RKIND> *RESTRICT product, SubscriptValue rows,
+ SubscriptValue cols, const XT *RESTRICT x, const YT *RESTRICT y,
+ SubscriptValue n, Fortran::common::optional<std::size_t> xColumnByteStride,
+ Fortran::common::optional<std::size_t> yColumnByteStride) {
+ if (!xColumnByteStride) {
+ if (!yColumnByteStride) {
+ MatrixTimesMatrix<RCAT, RKIND, XT, YT, false, false>(
+ product, rows, cols, x, y, n);
+ } else {
+ MatrixTimesMatrix<RCAT, RKIND, XT, YT, false, true>(
+ product, rows, cols, x, y, n, 0, *yColumnByteStride);
+ }
+ } else {
+ if (!yColumnByteStride) {
+ MatrixTimesMatrix<RCAT, RKIND, XT, YT, true, false>(
+ product, rows, cols, x, y, n, *xColumnByteStride);
+ } else {
+ MatrixTimesMatrix<RCAT, RKIND, XT, YT, true, true>(
+ product, rows, cols, x, y, n, *xColumnByteStride, *yColumnByteStride);
+ }
+ }
+}
+
+// Contiguous numeric matrix*vector multiplication
+// matrix(rows,n) * column vector(n) -> column vector(rows)
+// Straightforward algorithm:
+// DO 1 J = 1, NROWS
+// RES(J) = 0
+// DO 1 K = 1, N
+// 1 RES(J) = RES(J) + X(J,K)*Y(K)
+// With loop distribution and transposition to avoid the inner
+// sum reduction and to avoid non-unit strides:
+// DO 1 J = 1, NROWS
+// 1 RES(J) = 0
+// DO 2 K = 1, N
+// DO 2 J = 1, NROWS
+// 2 RES(J) = RES(J) + X(J,K)*Y(K)
+template <TypeCategory RCAT, int RKIND, typename XT, typename YT,
+ bool X_HAS_STRIDED_COLUMNS>
+inline RT_API_ATTRS void MatrixTimesVector(
+ CppTypeFor<RCAT, RKIND> *RESTRICT product, SubscriptValue rows,
+ SubscriptValue n, const XT *RESTRICT x, const YT *RESTRICT y,
+ std::size_t xColumnByteStride = 0) {
+ using ResultType = CppTypeFor<RCAT, RKIND>;
+ std::memset(product, 0, rows * sizeof *product);
+ [[maybe_unused]] const XT *RESTRICT xp0{x};
+ for (SubscriptValue k{0}; k < n; ++k) {
+ ResultType *RESTRICT p{product};
+ auto yv{static_cast<ResultType>(*y++)};
+ for (SubscriptValue j{0}; j < rows; ++j) {
+ *p++ += static_cast<ResultType>(*x++) * yv;
+ }
+ if constexpr (X_HAS_STRIDED_COLUMNS) {
+ xp0 = reinterpret_cast<const XT *>(
+ reinterpret_cast<const char *>(xp0) + xColumnByteStride);
+ x = xp0;
+ }
+ }
+}
+
+template <TypeCategory RCAT, int RKIND, typename XT, typename YT>
+inline RT_API_ATTRS void MatrixTimesVectorHelper(
+ CppTypeFor<RCAT, RKIND> *RESTRICT product, SubscriptValue rows,
+ SubscriptValue n, const XT *RESTRICT x, const YT *RESTRICT y,
+ Fortran::common::optional<std::size_t> xColumnByteStride) {
+ if (!xColumnByteStride) {
+ MatrixTimesVector<RCAT, RKIND, XT, YT, false>(product, rows, n, x, y);
+ } else {
+ MatrixTimesVector<RCAT, RKIND, XT, YT, true>(
+ product, rows, n, x, y, *xColumnByteStride);
+ }
+}
+
+// Contiguous numeric vector*matrix multiplication
+// row vector(n) * matrix(n,cols) -> row vector(cols)
+// Straightforward algorithm:
+// DO 1 J = 1, NCOLS
+// RES(J) = 0
+// DO 1 K = 1, N
+// 1 RES(J) = RES(J) + X(K)*Y(K,J)
+// With loop distribution and transposition to avoid the inner
+// sum reduction and one non-unit stride (the other remains):
+// DO 1 J = 1, NCOLS
+// 1 RES(J) = 0
+// DO 2 K = 1, N
+// DO 2 J = 1, NCOLS
+// 2 RES(J) = RES(J) + X(K)*Y(K,J)
+template <TypeCategory RCAT, int RKIND, typename XT, typename YT,
+ bool Y_HAS_STRIDED_COLUMNS>
+inline RT_API_ATTRS void VectorTimesMatrix(
+ CppTypeFor<RCAT, RKIND> *RESTRICT product, SubscriptValue n,
+ SubscriptValue cols, const XT *RESTRICT x, const YT *RESTRICT y,
+ std::size_t yColumnByteStride = 0) {
+ using ResultType = CppTypeFor<RCAT, RKIND>;
+ std::memset(product, 0, cols * sizeof *product);
+ for (SubscriptValue k{0}; k < n; ++k) {
+ ResultType *RESTRICT p{product};
+ auto xv{static_cast<ResultType>(*x++)};
+ const YT *RESTRICT yp{&y[k]};
+ for (SubscriptValue j{0}; j < cols; ++j) {
+ *p++ += xv * static_cast<ResultType>(*yp);
+ if constexpr (!Y_HAS_STRIDED_COLUMNS) {
+ yp += n;
+ } else {
+ yp = reinterpret_cast<const YT *>(
+ reinterpret_cast<const char *>(yp) + yColumnByteStride);
+ }
+ }
+ }
+}
+
+template <TypeCategory RCAT, int RKIND, typename XT, typename YT,
+ bool SPARSE_COLUMNS = false>
+inline RT_API_ATTRS void VectorTimesMatrixHelper(
+ CppTypeFor<RCAT, RKIND> *RESTRICT product, SubscriptValue n,
+ SubscriptValue cols, const XT *RESTRICT x, const YT *RESTRICT y,
+ Fortran::common::optional<std::size_t> yColumnByteStride) {
+ if (!yColumnByteStride) {
+ VectorTimesMatrix<RCAT, RKIND, XT, YT, false>(product, n, cols, x, y);
+ } else {
+ VectorTimesMatrix<RCAT, RKIND, XT, YT, true>(
+ product, n, cols, x, y, *yColumnByteStride);
+ }
+}
+
+// Implements an instance of MATMUL for given argument types.
+template <bool IS_ALLOCATING, TypeCategory RCAT, int RKIND, typename XT,
+ typename YT>
+static inline RT_API_ATTRS void DoMatmul(
+ std::conditional_t<IS_ALLOCATING, Descriptor, const Descriptor> &result,
+ const Descriptor &x, const Descriptor &y, Terminator &terminator) {
+ int xRank{x.rank()};
+ int yRank{y.rank()};
+ int resRank{xRank + yRank - 2};
+ if (xRank * yRank != 2 * resRank) {
+ terminator.Crash("MATMUL: bad argument ranks (%d * %d)", xRank, yRank);
+ }
+ SubscriptValue extent[2]{
+ xRank == 2 ? x.GetDimension(0).Extent() : y.GetDimension(1).Extent(),
+ resRank == 2 ? y.GetDimension(1).Extent() : 0};
+ if constexpr (IS_ALLOCATING) {
+ result.Establish(
+ RCAT, RKIND, nullptr, resRank, extent, CFI_attribute_allocatable);
+ for (int j{0}; j < resRank; ++j) {
+ result.GetDimension(j).SetBounds(1, extent[j]);
+ }
+ if (int stat{result.Allocate(kNoAsyncObject)}) {
+ terminator.Crash(
+ "MATMUL: could not allocate memory for result; STAT=%d", stat);
+ }
+ } else {
+ RUNTIME_CHECK(terminator, resRank == result.rank());
+ RUNTIME_CHECK(
+ terminator, result.ElementBytes() == static_cast<std::size_t>(RKIND));
+ RUNTIME_CHECK(terminator, result.GetDimension(0).Extent() == extent[0]);
+ RUNTIME_CHECK(terminator,
+ resRank == 1 || result.GetDimension(1).Extent() == extent[1]);
+ }
+ SubscriptValue n{x.GetDimension(xRank - 1).Extent()};
+ if (n != y.GetDimension(0).Extent()) {
+ // At this point, we know that there's a shape error. There are three
+ // possibilities, x is rank 1, y is rank 1, or both are rank 2.
+ if (xRank == 1) {
+ terminator.Crash("MATMUL: unacceptable operand shapes (%jd, %jdx%jd)",
+ static_cast<std::intmax_t>(n),
+ static_cast<std::intmax_t>(y.GetDimension(0).Extent()),
+ static_cast<std::intmax_t>(y.GetDimension(1).Extent()));
+ } else if (yRank == 1) {
+ terminator.Crash("MATMUL: unacceptable operand shapes (%jdx%jd, %jd)",
+ static_cast<std::intmax_t>(x.GetDimension(0).Extent()),
+ static_cast<std::intmax_t>(n),
+ static_cast<std::intmax_t>(y.GetDimension(0).Extent()));
+ } else {
+ terminator.Crash("MATMUL: unacceptable operand shapes (%jdx%jd, %jdx%jd)",
+ static_cast<std::intmax_t>(x.GetDimension(0).Extent()),
+ static_cast<std::intmax_t>(n),
+ static_cast<std::intmax_t>(y.GetDimension(0).Extent()),
+ static_cast<std::intmax_t>(y.GetDimension(1).Extent()));
+ }
+ }
+ using WriteResult =
+ CppTypeFor<RCAT == TypeCategory::Logical ? TypeCategory::Integer : RCAT,
+ RKIND>;
+ if constexpr (RCAT != TypeCategory::Logical) {
+ if (x.IsContiguous(1) && y.IsContiguous(1) &&
+ (IS_ALLOCATING || result.IsContiguous())) {
+ // Contiguous numeric matrices (maybe with columns
+ // separated by a stride).
+ Fortran::common::optional<std::size_t> xColumnByteStride;
+ if (!x.IsContiguous()) {
+ // X's columns are strided.
+ SubscriptValue xAt[2]{};
+ x.GetLowerBounds(xAt);
+ xAt[1]++;
+ xColumnByteStride = x.SubscriptsToByteOffset(xAt);
+ }
+ Fortran::common::optional<std::size_t> yColumnByteStride;
+ if (!y.IsContiguous()) {
+ // Y's columns are strided.
+ SubscriptValue yAt[2]{};
+ y.GetLowerBounds(yAt);
+ yAt[1]++;
+ yColumnByteStride = y.SubscriptsToByteOffset(yAt);
+ }
+ // Note that BLAS GEMM can be used for the strided
+ // columns by setting proper leading dimension size.
+ // This implies that the column stride is divisible
+ // by the element size, which is usually true.
+ if (resRank == 2) { // M*M -> M
+ if (std::is_same_v<XT, YT>) {
+ if constexpr (std::is_same_v<XT, float>) {
+ // TODO: call BLAS-3 SGEMM
+ // TODO: try using CUTLASS for device.
+ } else if constexpr (std::is_same_v<XT, double>) {
+ // TODO: call BLAS-3 DGEMM
+ } else if constexpr (std::is_same_v<XT, rtcmplx::complex<float>>) {
+ // TODO: call BLAS-3 CGEMM
+ } else if constexpr (std::is_same_v<XT, rtcmplx::complex<double>>) {
+ // TODO: call BLAS-3 ZGEMM
+ }
+ }
+ MatrixTimesMatrixHelper<RCAT, RKIND, XT, YT>(
+ result.template OffsetElement<WriteResult>(), extent[0], extent[1],
+ x.OffsetElement<XT>(), y.OffsetElement<YT>(), n, xColumnByteStride,
+ yColumnByteStride);
+ return;
+ } else if (xRank == 2) { // M*V -> V
+ if (std::is_same_v<XT, YT>) {
+ if constexpr (std::is_same_v<XT, float>) {
+ // TODO: call BLAS-2 SGEMV(x,y)
+ } else if constexpr (std::is_same_v<XT, double>) {
+ // TODO: call BLAS-2 DGEMV(x,y)
+ } else if constexpr (std::is_same_v<XT, rtcmplx::complex<float>>) {
+ // TODO: call BLAS-2 CGEMV(x,y)
+ } else if constexpr (std::is_same_v<XT, rtcmplx::complex<double>>) {
+ // TODO: call BLAS-2 ZGEMV(x,y)
+ }
+ }
+ MatrixTimesVectorHelper<RCAT, RKIND, XT, YT>(
+ result.template OffsetElement<WriteResult>(), extent[0], n,
+ x.OffsetElement<XT>(), y.OffsetElement<YT>(), xColumnByteStride);
+ return;
+ } else { // V*M -> V
+ if (std::is_same_v<XT, YT>) {
+ if constexpr (std::is_same_v<XT, float>) {
+ // TODO: call BLAS-2 SGEMV(y,x)
+ } else if constexpr (std::is_same_v<XT, double>) {
+ // TODO: call BLAS-2 DGEMV(y,x)
+ } else if constexpr (std::is_same_v<XT, rtcmplx::complex<float>>) {
+ // TODO: call BLAS-2 CGEMV(y,x)
+ } else if constexpr (std::is_same_v<XT, rtcmplx::complex<double>>) {
+ // TODO: call BLAS-2 ZGEMV(y,x)
+ }
+ }
+ VectorTimesMatrixHelper<RCAT, RKIND, XT, YT>(
+ result.template OffsetElement<WriteResult>(), n, extent[0],
+ x.OffsetElement<XT>(), y.OffsetElement<YT>(), yColumnByteStride);
+ return;
+ }
+ }
+ }
+ // General algorithms for LOGICAL and noncontiguity
+ SubscriptValue xAt[2], yAt[2], resAt[2];
+ x.GetLowerBounds(xAt);
+ y.GetLowerBounds(yAt);
+ result.GetLowerBounds(resAt);
+ if (resRank == 2) { // M*M -> M
+ SubscriptValue x1{xAt[1]}, y0{yAt[0]}, y1{yAt[1]}, res1{resAt[1]};
+ for (SubscriptValue i{0}; i < extent[0]; ++i) {
+ for (SubscriptValue j{0}; j < extent[1]; ++j) {
+ Accumulator<RCAT, RKIND, XT, YT> accumulator{x, y};
+ yAt[1] = y1 + j;
+ for (SubscriptValue k{0}; k < n; ++k) {
+ xAt[1] = x1 + k;
+ yAt[0] = y0 + k;
+ accumulator.Accumulate(xAt, yAt);
+ }
+ resAt[1] = res1 + j;
+ *result.template Element<WriteResult>(resAt) = accumulator.GetResult();
+ }
+ ++resAt[0];
+ ++xAt[0];
+ }
+ } else if (xRank == 2) { // M*V -> V
+ SubscriptValue x1{xAt[1]}, y0{yAt[0]};
+ for (SubscriptValue j{0}; j < extent[0]; ++j) {
+ Accumulator<RCAT, RKIND, XT, YT> accumulator{x, y};
+ for (SubscriptValue k{0}; k < n; ++k) {
+ xAt[1] = x1 + k;
+ yAt[0] = y0 + k;
+ accumulator.Accumulate(xAt, yAt);
+ }
+ *result.template Element<WriteResult>(resAt) = accumulator.GetResult();
+ ++resAt[0];
+ ++xAt[0];
+ }
+ } else { // V*M -> V
+ SubscriptValue x0{xAt[0]}, y0{yAt[0]};
+ for (SubscriptValue j{0}; j < extent[0]; ++j) {
+ Accumulator<RCAT, RKIND, XT, YT> accumulator{x, y};
+ for (SubscriptValue k{0}; k < n; ++k) {
+ xAt[0] = x0 + k;
+ yAt[0] = y0 + k;
+ accumulator.Accumulate(xAt, yAt);
+ }
+ *result.template Element<WriteResult>(resAt) = accumulator.GetResult();
+ ++resAt[0];
+ ++yAt[1];
+ }
+ }
+}
+
+template <bool IS_ALLOCATING, TypeCategory XCAT, int XKIND, TypeCategory YCAT,
+ int YKIND>
+struct MatmulHelper {
+ using ResultTy = Fortran::common::optional<std::pair<TypeCategory, int>>;
+ using ResultDescriptor =
+ std::conditional_t<IS_ALLOCATING, Descriptor, const Descriptor>;
+ RT_API_ATTRS void operator()(ResultDescriptor &result, const Descriptor &x,
+ const Descriptor &y, const char *sourceFile, int line) const {
+ Terminator terminator{sourceFile, line};
+ auto xCatKind{x.type().GetCategoryAndKind()};
+ auto yCatKind{y.type().GetCategoryAndKind()};
+ RUNTIME_CHECK(terminator, xCatKind.has_value() && yCatKind.has_value());
+ RUNTIME_CHECK(terminator,
+ (xCatKind->first == XCAT && yCatKind->first == YCAT) ||
+ (XCAT == TypeCategory::Integer && YCAT == TypeCategory::Integer &&
+ ((xCatKind->first == TypeCategory::Integer ||
+ xCatKind->first == TypeCategory::Unsigned) &&
+ (yCatKind->first == TypeCategory::Integer ||
+ yCatKind->first == TypeCategory::Unsigned))));
+ if constexpr (constexpr ResultTy resultType{
+ GetResultType(XCAT, XKIND, YCAT, YKIND)}) {
+ return DoMatmul<IS_ALLOCATING, resultType->first, resultType->second,
+ CppTypeFor<XCAT, XKIND>, CppTypeFor<YCAT, YKIND>>(
+ result, x, y, terminator);
+ }
+ terminator.Crash("MATMUL: bad operand types (%d(%d), %d(%d))",
+ static_cast<int>(XCAT), XKIND, static_cast<int>(YCAT), YKIND);
+ }
+};
+} // namespace
+
+namespace Fortran::runtime {
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+#define MATMUL_INSTANCE(XCAT, XKIND, YCAT, YKIND) \
+ void RTDEF(Matmul##XCAT##XKIND##YCAT##YKIND)(Descriptor & result, \
+ const Descriptor &x, const Descriptor &y, const char *sourceFile, \
+ int line) { \
+ MatmulHelper<true, TypeCategory::XCAT, XKIND, TypeCategory::YCAT, \
+ YKIND>{}(result, x, y, sourceFile, line); \
+ }
+
+#define MATMUL_DIRECT_INSTANCE(XCAT, XKIND, YCAT, YKIND) \
+ void RTDEF(MatmulDirect##XCAT##XKIND##YCAT##YKIND)(Descriptor & result, \
+ const Descriptor &x, const Descriptor &y, const char *sourceFile, \
+ int line) { \
+ MatmulHelper<false, TypeCategory::XCAT, XKIND, TypeCategory::YCAT, \
+ YKIND>{}(result, x, y, sourceFile, line); \
+ }
+
+#define MATMUL_FORCE_ALL_TYPES 0
+
+#include "flang/Runtime/matmul-instances.inc"
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/memory.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/memory.cpp
new file mode 100644
index 00000000000..79c7e337775
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/memory.cpp
@@ -0,0 +1,46 @@
+//===-- lib/runtime/memory.cpp ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang-rt/runtime/memory.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+#include "flang/Runtime/freestanding-tools.h"
+#include <cstdlib>
+
+namespace Fortran::runtime {
+RT_OFFLOAD_API_GROUP_BEGIN
+
+void *AllocateMemoryOrCrash(const Terminator &terminator, std::size_t bytes) {
+ if (void *p{std::malloc(bytes)}) {
+ return p;
+ }
+ if (bytes > 0) {
+ terminator.Crash(
+ "Fortran runtime internal error: out of memory, needed %zd bytes",
+ bytes);
+ }
+ return nullptr;
+}
+
+void *ReallocateMemoryOrCrash(
+ const Terminator &terminator, void *ptr, std::size_t newByteSize) {
+ if (void *p{Fortran::runtime::realloc(ptr, newByteSize)}) {
+ return p;
+ }
+ if (newByteSize > 0) {
+ terminator.Crash("Fortran runtime internal error: memory realloc returned "
+ "null, needed %zd bytes",
+ newByteSize);
+ }
+ return nullptr;
+}
+
+void FreeMemory(void *p) { std::free(p); }
+
+RT_OFFLOAD_API_GROUP_END
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/misc-intrinsic.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/misc-intrinsic.cpp
new file mode 100644
index 00000000000..a8797f48fa6
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/misc-intrinsic.cpp
@@ -0,0 +1,121 @@
+//===-- lib/runtime/misc-intrinsic.cpp --------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang/Runtime/misc-intrinsic.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+#include "flang/Common/optional.h"
+#include <algorithm>
+#include <cstdio>
+#include <cstring>
+
+namespace Fortran::runtime {
+
+static RT_API_ATTRS void TransferImpl(Descriptor &result,
+ const Descriptor &source, const Descriptor &mold, const char *sourceFile,
+ int line, Fortran::common::optional<std::int64_t> resultExtent) {
+ int rank{resultExtent.has_value() ? 1 : 0};
+ std::size_t elementBytes{mold.ElementBytes()};
+ result.Establish(mold.type(), elementBytes, nullptr, rank, nullptr,
+ CFI_attribute_allocatable, mold.Addendum() != nullptr);
+ if (resultExtent) {
+ result.GetDimension(0).SetBounds(1, *resultExtent);
+ }
+ if (const DescriptorAddendum * addendum{mold.Addendum()}) {
+ *result.Addendum() = *addendum;
+ }
+ if (int stat{result.Allocate(kNoAsyncObject)}) {
+ Terminator{sourceFile, line}.Crash(
+ "TRANSFER: could not allocate memory for result; STAT=%d", stat);
+ }
+ char *to{result.OffsetElement<char>()};
+ std::size_t resultBytes{result.Elements() * result.ElementBytes()};
+ const std::size_t sourceElementBytes{source.ElementBytes()};
+ std::size_t sourceElements{source.Elements()};
+ SubscriptValue sourceAt[maxRank];
+ source.GetLowerBounds(sourceAt);
+ while (resultBytes > 0 && sourceElements > 0) {
+ std::size_t toMove{std::min(resultBytes, sourceElementBytes)};
+ std::memcpy(to, source.Element<char>(sourceAt), toMove);
+ to += toMove;
+ resultBytes -= toMove;
+ --sourceElements;
+ source.IncrementSubscripts(sourceAt);
+ }
+ if (resultBytes > 0) {
+ std::memset(to, 0, resultBytes);
+ }
+}
+
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+void RTDEF(Rename)(const Descriptor &path1, const Descriptor &path2,
+ const Descriptor *status, const char *sourceFile, int line) {
+ Terminator terminator{sourceFile, line};
+#if !defined(RT_DEVICE_COMPILATION)
+ char *pathSrc{EnsureNullTerminated(
+ path1.OffsetElement(), path1.ElementBytes(), terminator)};
+ char *pathDst{EnsureNullTerminated(
+ path2.OffsetElement(), path2.ElementBytes(), terminator)};
+
+ // We simply call rename(2) from POSIX
+ int result{rename(pathSrc, pathDst)};
+ if (status) {
+ // When an error has happened,
+ int errorCode{0}; // Assume success
+ if (result != 0) {
+ // The rename operation has failed, so return the error code as status.
+ errorCode = errno;
+ }
+ StoreIntToDescriptor(status, errorCode, terminator);
+ }
+
+ // Deallocate memory if EnsureNullTerminated dynamically allocated memory
+ if (pathSrc != path1.OffsetElement()) {
+ FreeMemory(pathSrc);
+ }
+ if (pathDst != path2.OffsetElement()) {
+ FreeMemory(pathDst);
+ }
+#else // !defined(RT_DEVICE_COMPILATION)
+ terminator.Crash("RENAME intrinsic is only supported on host devices");
+#endif // !defined(RT_DEVICE_COMPILATION)
+}
+
+void RTDEF(Transfer)(Descriptor &result, const Descriptor &source,
+ const Descriptor &mold, const char *sourceFile, int line) {
+ Fortran::common::optional<std::int64_t> elements;
+ if (mold.rank() > 0) {
+ if (std::size_t sourceElementBytes{
+ source.Elements() * source.ElementBytes()}) {
+ if (std::size_t moldElementBytes{mold.ElementBytes()}) {
+ elements = static_cast<std::int64_t>(
+ (sourceElementBytes + moldElementBytes - 1) / moldElementBytes);
+ } else {
+ Terminator{sourceFile, line}.Crash("TRANSFER: zero-sized type of MOLD= "
+ "when SOURCE= is not zero-sized");
+ }
+ } else {
+ elements = std::int64_t{0};
+ }
+ }
+ return TransferImpl(
+ result, source, mold, sourceFile, line, std::move(elements));
+}
+
+void RTDEF(TransferSize)(Descriptor &result, const Descriptor &source,
+ const Descriptor &mold, const char *sourceFile, int line,
+ std::int64_t size) {
+ return TransferImpl(result, source, mold, sourceFile, line, size);
+}
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/namelist.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/namelist.cpp
new file mode 100644
index 00000000000..1bef387a977
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/namelist.cpp
@@ -0,0 +1,626 @@
+//===-- lib/runtime/namelist.cpp --------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang-rt/runtime/namelist.h"
+#include "descriptor-io.h"
+#include "flang-rt/runtime/emit-encoded.h"
+#include "flang-rt/runtime/io-stmt.h"
+#include "flang-rt/runtime/type-info.h"
+#include "flang/Runtime/io-api.h"
+#include <algorithm>
+#include <cstring>
+#include <limits>
+
+namespace Fortran::runtime::io {
+
+RT_VAR_GROUP_BEGIN
+// Max size of a group, symbol or component identifier that can appear in
+// NAMELIST input, plus a byte for NUL termination.
+static constexpr RT_CONST_VAR_ATTRS std::size_t nameBufferSize{201};
+RT_VAR_GROUP_END
+
+RT_OFFLOAD_API_GROUP_BEGIN
+
+static inline RT_API_ATTRS char32_t GetComma(IoStatementState &io) {
+ return io.mutableModes().editingFlags & decimalComma ? char32_t{';'}
+ : char32_t{','};
+}
+
+bool IODEF(OutputNamelist)(Cookie cookie, const NamelistGroup &group) {
+ IoStatementState &io{*cookie};
+ io.CheckFormattedStmtType<Direction::Output>("OutputNamelist");
+ io.mutableModes().inNamelist = true;
+ ConnectionState &connection{io.GetConnectionState()};
+ // The following lambda definition violates the conding style,
+ // but cuda-11.8 nvcc hits an internal error with the brace initialization.
+
+ // Internal function to advance records and convert case
+ const auto EmitUpperCase = [&](const char *prefix, std::size_t prefixLen,
+ const char *str, char suffix) -> bool {
+ if ((connection.NeedAdvance(prefixLen) &&
+ !(io.AdvanceRecord() && EmitAscii(io, " ", 1))) ||
+ !EmitAscii(io, prefix, prefixLen) ||
+ (connection.NeedAdvance(
+ Fortran::runtime::strlen(str) + (suffix != ' ')) &&
+ !(io.AdvanceRecord() && EmitAscii(io, " ", 1)))) {
+ return false;
+ }
+ for (; *str; ++str) {
+ char up{*str >= 'a' && *str <= 'z' ? static_cast<char>(*str - 'a' + 'A')
+ : *str};
+ if (!EmitAscii(io, &up, 1)) {
+ return false;
+ }
+ }
+ return suffix == ' ' || EmitAscii(io, &suffix, 1);
+ };
+ // &GROUP
+ if (!EmitUpperCase(" &", 2, group.groupName, ' ')) {
+ return false;
+ }
+ auto *listOutput{io.get_if<ListDirectedStatementState<Direction::Output>>()};
+ char comma{static_cast<char>(GetComma(io))};
+ char prefix{' '};
+ for (std::size_t j{0}; j < group.items; ++j) {
+ // [,]ITEM=...
+ const NamelistGroup::Item &item{group.item[j]};
+ if (listOutput) {
+ listOutput->set_lastWasUndelimitedCharacter(false);
+ }
+ if (!EmitUpperCase(&prefix, 1, item.name, '=')) {
+ return false;
+ }
+ prefix = comma;
+ if (const auto *addendum{item.descriptor.Addendum()};
+ addendum && addendum->derivedType()) {
+ const NonTbpDefinedIoTable *table{group.nonTbpDefinedIo};
+ if (!IONAME(OutputDerivedType)(cookie, item.descriptor, table)) {
+ return false;
+ }
+ } else if (!descr::DescriptorIO<Direction::Output>(io, item.descriptor)) {
+ return false;
+ }
+ }
+ // terminal /
+ return EmitUpperCase("/", 1, "", ' ');
+}
+
+static constexpr RT_API_ATTRS bool IsLegalIdStart(char32_t ch) {
+ return (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || ch == '_' ||
+ ch == '@';
+}
+
+static constexpr RT_API_ATTRS bool IsLegalIdChar(char32_t ch) {
+ return IsLegalIdStart(ch) || (ch >= '0' && ch <= '9');
+}
+
+static constexpr RT_API_ATTRS char NormalizeIdChar(char32_t ch) {
+ return static_cast<char>(ch >= 'A' && ch <= 'Z' ? ch - 'A' + 'a' : ch);
+}
+
+static RT_API_ATTRS bool GetLowerCaseName(
+ IoStatementState &io, char buffer[], std::size_t maxLength) {
+ std::size_t byteLength{0};
+ if (auto ch{io.GetNextNonBlank(byteLength)}) {
+ if (IsLegalIdStart(*ch)) {
+ std::size_t j{0};
+ do {
+ buffer[j] = NormalizeIdChar(*ch);
+ io.HandleRelativePosition(byteLength);
+ ch = io.GetCurrentChar(byteLength);
+ } while (++j < maxLength && ch && IsLegalIdChar(*ch));
+ buffer[j++] = '\0';
+ if (j <= maxLength) {
+ return true;
+ }
+ io.GetIoErrorHandler().SignalError(
+ "Identifier '%s...' in NAMELIST input group is too long", buffer);
+ }
+ }
+ return false;
+}
+
+static RT_API_ATTRS Fortran::common::optional<SubscriptValue> GetSubscriptValue(
+ IoStatementState &io) {
+ Fortran::common::optional<SubscriptValue> value;
+ std::size_t byteCount{0};
+ Fortran::common::optional<char32_t> ch{io.GetCurrentChar(byteCount)};
+ bool negate{ch && *ch == '-'};
+ if ((ch && *ch == '+') || negate) {
+ io.HandleRelativePosition(byteCount);
+ ch = io.GetCurrentChar(byteCount);
+ }
+ bool overflow{false};
+ while (ch && *ch >= '0' && *ch <= '9') {
+ SubscriptValue was{value.value_or(0)};
+ overflow |= was >= std::numeric_limits<SubscriptValue>::max() / 10;
+ value = 10 * was + *ch - '0';
+ io.HandleRelativePosition(byteCount);
+ ch = io.GetCurrentChar(byteCount);
+ }
+ if (overflow) {
+ io.GetIoErrorHandler().SignalError(
+ "NAMELIST input subscript value overflow");
+ return Fortran::common::nullopt;
+ }
+ if (negate) {
+ if (value) {
+ return -*value;
+ } else {
+ io.HandleRelativePosition(-byteCount); // give back '-' with no digits
+ }
+ }
+ return value;
+}
+
+static RT_API_ATTRS bool HandleSubscripts(IoStatementState &io,
+ Descriptor &desc, const Descriptor &source, const char *name) {
+ IoErrorHandler &handler{io.GetIoErrorHandler()};
+ // Allow for blanks in subscripts; they're nonstandard, but not
+ // ambiguous within the parentheses.
+ SubscriptValue lower[maxRank], upper[maxRank], stride[maxRank];
+ int j{0};
+ std::size_t contiguousStride{source.ElementBytes()};
+ bool ok{true};
+ std::size_t byteCount{0};
+ Fortran::common::optional<char32_t> ch{io.GetNextNonBlank(byteCount)};
+ char32_t comma{GetComma(io)};
+ for (; ch && *ch != ')'; ++j) {
+ SubscriptValue dimLower{0}, dimUpper{0}, dimStride{0};
+ if (j < maxRank && j < source.rank()) {
+ const Dimension &dim{source.GetDimension(j)};
+ dimLower = dim.LowerBound();
+ dimUpper = dim.UpperBound();
+ dimStride =
+ dim.ByteStride() / std::max<SubscriptValue>(contiguousStride, 1);
+ contiguousStride *= dim.Extent();
+ } else if (ok) {
+ handler.SignalError(
+ "Too many subscripts for rank-%d NAMELIST group item '%s'",
+ source.rank(), name);
+ ok = false;
+ }
+ if (auto low{GetSubscriptValue(io)}) {
+ if (*low < dimLower || (dimUpper >= dimLower && *low > dimUpper)) {
+ if (ok) {
+ handler.SignalError("Subscript %jd out of range %jd..%jd in NAMELIST "
+ "group item '%s' dimension %d",
+ static_cast<std::intmax_t>(*low),
+ static_cast<std::intmax_t>(dimLower),
+ static_cast<std::intmax_t>(dimUpper), name, j + 1);
+ ok = false;
+ }
+ } else {
+ dimLower = *low;
+ }
+ ch = io.GetNextNonBlank(byteCount);
+ }
+ if (ch && *ch == ':') {
+ io.HandleRelativePosition(byteCount);
+ ch = io.GetNextNonBlank(byteCount);
+ if (auto high{GetSubscriptValue(io)}) {
+ if (*high > dimUpper) {
+ if (ok) {
+ handler.SignalError(
+ "Subscript triplet upper bound %jd out of range (>%jd) in "
+ "NAMELIST group item '%s' dimension %d",
+ static_cast<std::intmax_t>(*high),
+ static_cast<std::intmax_t>(dimUpper), name, j + 1);
+ ok = false;
+ }
+ } else {
+ dimUpper = *high;
+ }
+ ch = io.GetNextNonBlank(byteCount);
+ }
+ if (ch && *ch == ':') {
+ io.HandleRelativePosition(byteCount);
+ ch = io.GetNextNonBlank(byteCount);
+ if (auto str{GetSubscriptValue(io)}) {
+ dimStride = *str;
+ ch = io.GetNextNonBlank(byteCount);
+ }
+ }
+ } else { // scalar
+ dimUpper = dimLower;
+ dimStride = 0;
+ }
+ if (ch && *ch == comma) {
+ io.HandleRelativePosition(byteCount);
+ ch = io.GetNextNonBlank(byteCount);
+ }
+ if (ok) {
+ lower[j] = dimLower;
+ upper[j] = dimUpper;
+ stride[j] = dimStride;
+ }
+ }
+ if (ok) {
+ if (ch && *ch == ')') {
+ io.HandleRelativePosition(byteCount);
+ if (desc.EstablishPointerSection(source, lower, upper, stride)) {
+ return true;
+ } else {
+ handler.SignalError(
+ "Bad subscripts for NAMELIST input group item '%s'", name);
+ }
+ } else {
+ handler.SignalError(
+ "Bad subscripts (missing ')') for NAMELIST input group item '%s'",
+ name);
+ }
+ }
+ return false;
+}
+
+static RT_API_ATTRS void StorageSequenceExtension(
+ Descriptor &desc, const Descriptor &source) {
+ // Support the near-universal extension of NAMELIST input into a
+ // designatable storage sequence identified by its initial scalar array
+ // element. For example, treat "A(1) = 1. 2. 3." as if it had been
+ // "A(1:) = 1. 2. 3.".
+ if (desc.rank() == 0 && (source.rank() == 1 || source.IsContiguous())) {
+ if (auto stride{source.rank() == 1
+ ? source.GetDimension(0).ByteStride()
+ : static_cast<SubscriptValue>(source.ElementBytes())};
+ stride != 0) {
+ desc.raw().attribute = CFI_attribute_pointer;
+ desc.raw().rank = 1;
+ desc.GetDimension(0)
+ .SetBounds(1,
+ source.Elements() -
+ ((source.OffsetElement() - desc.OffsetElement()) / stride))
+ .SetByteStride(stride);
+ }
+ }
+}
+
+static RT_API_ATTRS bool HandleSubstring(
+ IoStatementState &io, Descriptor &desc, const char *name) {
+ IoErrorHandler &handler{io.GetIoErrorHandler()};
+ auto pair{desc.type().GetCategoryAndKind()};
+ if (!pair || pair->first != TypeCategory::Character) {
+ handler.SignalError("Substring reference to non-character item '%s'", name);
+ return false;
+ }
+ int kind{pair->second};
+ SubscriptValue chars{static_cast<SubscriptValue>(desc.ElementBytes()) / kind};
+ // Allow for blanks in substring bounds; they're nonstandard, but not
+ // ambiguous within the parentheses.
+ Fortran::common::optional<SubscriptValue> lower, upper;
+ std::size_t byteCount{0};
+ Fortran::common::optional<char32_t> ch{io.GetNextNonBlank(byteCount)};
+ if (ch) {
+ if (*ch == ':') {
+ lower = 1;
+ } else {
+ lower = GetSubscriptValue(io);
+ ch = io.GetNextNonBlank(byteCount);
+ }
+ }
+ if (ch && *ch == ':') {
+ io.HandleRelativePosition(byteCount);
+ ch = io.GetNextNonBlank(byteCount);
+ if (ch) {
+ if (*ch == ')') {
+ upper = chars;
+ } else {
+ upper = GetSubscriptValue(io);
+ ch = io.GetNextNonBlank(byteCount);
+ }
+ }
+ }
+ if (ch && *ch == ')') {
+ io.HandleRelativePosition(byteCount);
+ if (lower && upper) {
+ if (*lower > *upper) {
+ // An empty substring, whatever the values are
+ desc.raw().elem_len = 0;
+ return true;
+ }
+ if (*lower >= 1 && *upper <= chars) {
+ // Offset the base address & adjust the element byte length
+ desc.raw().elem_len = (*upper - *lower + 1) * kind;
+ desc.set_base_addr(reinterpret_cast<void *>(
+ reinterpret_cast<char *>(desc.raw().base_addr) +
+ kind * (*lower - 1)));
+ return true;
+ }
+ }
+ handler.SignalError(
+ "Bad substring bounds for NAMELIST input group item '%s'", name);
+ } else {
+ handler.SignalError(
+ "Bad substring (missing ')') for NAMELIST input group item '%s'", name);
+ }
+ return false;
+}
+
+static RT_API_ATTRS bool HandleComponent(IoStatementState &io, Descriptor &desc,
+ const Descriptor &source, const char *name) {
+ IoErrorHandler &handler{io.GetIoErrorHandler()};
+ char compName[nameBufferSize];
+ if (GetLowerCaseName(io, compName, sizeof compName)) {
+ const DescriptorAddendum *addendum{source.Addendum()};
+ if (const typeInfo::DerivedType *
+ type{addendum ? addendum->derivedType() : nullptr}) {
+ if (const typeInfo::Component *
+ comp{type->FindDataComponent(
+ compName, Fortran::runtime::strlen(compName))}) {
+ bool createdDesc{false};
+ if (comp->rank() > 0 && source.rank() > 0) {
+ // If base and component are both arrays, the component name
+ // must be followed by subscripts; process them now.
+ std::size_t byteCount{0};
+ if (Fortran::common::optional<char32_t> next{
+ io.GetNextNonBlank(byteCount)};
+ next && *next == '(') {
+ io.HandleRelativePosition(byteCount); // skip over '('
+ StaticDescriptor<maxRank, true, 16> staticDesc;
+ Descriptor &tmpDesc{staticDesc.descriptor()};
+ comp->CreatePointerDescriptor(tmpDesc, source, handler);
+ if (!HandleSubscripts(io, desc, tmpDesc, compName)) {
+ return false;
+ }
+ createdDesc = true;
+ }
+ }
+ if (!createdDesc) {
+ comp->CreatePointerDescriptor(desc, source, handler);
+ }
+ if (source.rank() > 0) {
+ if (desc.rank() > 0) {
+ handler.SignalError(
+ "NAMELIST component reference '%%%s' of input group "
+ "item %s cannot be an array when its base is not scalar",
+ compName, name);
+ return false;
+ }
+ desc.raw().rank = source.rank();
+ for (int j{0}; j < source.rank(); ++j) {
+ const auto &srcDim{source.GetDimension(j)};
+ desc.GetDimension(j)
+ .SetBounds(1, srcDim.UpperBound())
+ .SetByteStride(srcDim.ByteStride());
+ }
+ }
+ return true;
+ } else {
+ handler.SignalError(
+ "NAMELIST component reference '%%%s' of input group item %s is not "
+ "a component of its derived type",
+ compName, name);
+ }
+ } else if (source.type().IsDerived()) {
+ handler.Crash("Derived type object '%s' in NAMELIST is missing its "
+ "derived type information!",
+ name);
+ } else {
+ handler.SignalError("NAMELIST component reference '%%%s' of input group "
+ "item %s for non-derived type",
+ compName, name);
+ }
+ } else {
+ handler.SignalError("NAMELIST component reference of input group item %s "
+ "has no name after '%%'",
+ name);
+ }
+ return false;
+}
+
+// Advance to the terminal '/' of a namelist group or leading '&'/'$'
+// of the next.
+static RT_API_ATTRS void SkipNamelistGroup(IoStatementState &io) {
+ std::size_t byteCount{0};
+ while (auto ch{io.GetNextNonBlank(byteCount)}) {
+ io.HandleRelativePosition(byteCount);
+ if (*ch == '/' || *ch == '&' || *ch == '$') {
+ break;
+ } else if (*ch == '\'' || *ch == '"') {
+ // Skip quoted character literal
+ char32_t quote{*ch};
+ while (true) {
+ if ((ch = io.GetCurrentChar(byteCount))) {
+ io.HandleRelativePosition(byteCount);
+ if (*ch == quote) {
+ break;
+ }
+ } else if (!io.AdvanceRecord()) {
+ return;
+ }
+ }
+ }
+ }
+}
+
+bool IODEF(InputNamelist)(Cookie cookie, const NamelistGroup &group) {
+ IoStatementState &io{*cookie};
+ io.CheckFormattedStmtType<Direction::Input>("InputNamelist");
+ io.mutableModes().inNamelist = true;
+ IoErrorHandler &handler{io.GetIoErrorHandler()};
+ auto *listInput{io.get_if<ListDirectedStatementState<Direction::Input>>()};
+ RUNTIME_CHECK(handler, listInput != nullptr);
+ // Find this namelist group's header in the input
+ io.BeginReadingRecord();
+ Fortran::common::optional<char32_t> next;
+ char name[nameBufferSize];
+ RUNTIME_CHECK(handler, group.groupName != nullptr);
+ char32_t comma{GetComma(io)};
+ std::size_t byteCount{0};
+ while (true) {
+ next = io.GetNextNonBlank(byteCount);
+ while (next && *next != '&' && *next != '$') {
+ // Extension: comment lines without ! before namelist groups
+ if (!io.AdvanceRecord()) {
+ next.reset();
+ } else {
+ next = io.GetNextNonBlank(byteCount);
+ }
+ }
+ if (!next) {
+ handler.SignalEnd();
+ return false;
+ }
+ if (*next != '&' && *next != '$') {
+ handler.SignalError(
+ "NAMELIST input group does not begin with '&' or '$' (at '%lc')",
+ *next);
+ return false;
+ }
+ io.HandleRelativePosition(byteCount);
+ if (!GetLowerCaseName(io, name, sizeof name)) {
+ handler.SignalError("NAMELIST input group has no name");
+ return false;
+ }
+ if (Fortran::runtime::strcmp(group.groupName, name) == 0) {
+ break; // found it
+ }
+ SkipNamelistGroup(io);
+ }
+ // Read the group's items
+ while (true) {
+ next = io.GetNextNonBlank(byteCount);
+ if (!next || *next == '/' || *next == '&' || *next == '$') {
+ break;
+ }
+ if (!GetLowerCaseName(io, name, sizeof name)) {
+ handler.SignalError(
+ "NAMELIST input group '%s' was not terminated at '%c'",
+ group.groupName, static_cast<char>(*next));
+ return false;
+ }
+ std::size_t itemIndex{0};
+ for (; itemIndex < group.items; ++itemIndex) {
+ if (Fortran::runtime::strcmp(name, group.item[itemIndex].name) == 0) {
+ break;
+ }
+ }
+ if (itemIndex >= group.items) {
+ handler.SignalError(
+ "'%s' is not an item in NAMELIST group '%s'", name, group.groupName);
+ return false;
+ }
+ // Handle indexing and components, if any. No spaces are allowed.
+ // A copy of the descriptor is made if necessary.
+ const Descriptor &itemDescriptor{group.item[itemIndex].descriptor};
+ const Descriptor *useDescriptor{&itemDescriptor};
+ StaticDescriptor<maxRank, true, 16> staticDesc[2];
+ int whichStaticDesc{0};
+ next = io.GetCurrentChar(byteCount);
+ bool hadSubscripts{false};
+ bool hadSubstring{false};
+ if (next && (*next == '(' || *next == '%')) {
+ const Descriptor *lastSubscriptBase{nullptr};
+ Descriptor *lastSubscriptDescriptor{nullptr};
+ do {
+ Descriptor &mutableDescriptor{staticDesc[whichStaticDesc].descriptor()};
+ whichStaticDesc ^= 1;
+ io.HandleRelativePosition(byteCount); // skip over '(' or '%'
+ lastSubscriptDescriptor = nullptr;
+ lastSubscriptBase = nullptr;
+ if (*next == '(') {
+ if (!hadSubstring && (hadSubscripts || useDescriptor->rank() == 0)) {
+ mutableDescriptor = *useDescriptor;
+ mutableDescriptor.raw().attribute = CFI_attribute_pointer;
+ if (!HandleSubstring(io, mutableDescriptor, name)) {
+ return false;
+ }
+ hadSubstring = true;
+ } else if (hadSubscripts) {
+ handler.SignalError("Multiple sets of subscripts for item '%s' in "
+ "NAMELIST group '%s'",
+ name, group.groupName);
+ return false;
+ } else if (HandleSubscripts(
+ io, mutableDescriptor, *useDescriptor, name)) {
+ lastSubscriptBase = useDescriptor;
+ lastSubscriptDescriptor = &mutableDescriptor;
+ } else {
+ return false;
+ }
+ hadSubscripts = true;
+ } else {
+ if (!HandleComponent(io, mutableDescriptor, *useDescriptor, name)) {
+ return false;
+ }
+ hadSubscripts = false;
+ hadSubstring = false;
+ }
+ useDescriptor = &mutableDescriptor;
+ next = io.GetCurrentChar(byteCount);
+ } while (next && (*next == '(' || *next == '%'));
+ if (lastSubscriptDescriptor) {
+ StorageSequenceExtension(*lastSubscriptDescriptor, *lastSubscriptBase);
+ }
+ }
+ // Skip the '='
+ next = io.GetNextNonBlank(byteCount);
+ if (!next || *next != '=') {
+ handler.SignalError("No '=' found after item '%s' in NAMELIST group '%s'",
+ name, group.groupName);
+ return false;
+ }
+ io.HandleRelativePosition(byteCount);
+ // Read the values into the descriptor. An array can be short.
+ if (const auto *addendum{useDescriptor->Addendum()};
+ addendum && addendum->derivedType()) {
+ const NonTbpDefinedIoTable *table{group.nonTbpDefinedIo};
+ listInput->ResetForNextNamelistItem(/*inNamelistSequence=*/true);
+ if (!IONAME(InputDerivedType)(cookie, *useDescriptor, table)) {
+ return false;
+ }
+ } else {
+ listInput->ResetForNextNamelistItem(useDescriptor->rank() > 0);
+ if (!descr::DescriptorIO<Direction::Input>(io, *useDescriptor)) {
+ return false;
+ }
+ }
+ next = io.GetNextNonBlank(byteCount);
+ if (next && *next == comma) {
+ io.HandleRelativePosition(byteCount);
+ }
+ }
+ if (next && *next == '/') {
+ io.HandleRelativePosition(byteCount);
+ } else if (*next && (*next == '&' || *next == '$')) {
+ // stop at beginning of next group
+ } else {
+ handler.SignalError(
+ "No '/' found after NAMELIST group '%s'", group.groupName);
+ return false;
+ }
+ return true;
+}
+
+RT_API_ATTRS bool IsNamelistNameOrSlash(IoStatementState &io) {
+ if (auto *listInput{
+ io.get_if<ListDirectedStatementState<Direction::Input>>()}) {
+ if (listInput->inNamelistSequence()) {
+ SavedPosition savedPosition{io};
+ std::size_t byteCount{0};
+ if (auto ch{io.GetNextNonBlank(byteCount)}) {
+ if (IsLegalIdStart(*ch)) {
+ do {
+ io.HandleRelativePosition(byteCount);
+ ch = io.GetCurrentChar(byteCount);
+ } while (ch && IsLegalIdChar(*ch));
+ ch = io.GetNextNonBlank(byteCount);
+ // TODO: how to deal with NaN(...) ambiguity?
+ return ch && (*ch == '=' || *ch == '(' || *ch == '%');
+ } else {
+ return *ch == '/' || *ch == '&' || *ch == '$';
+ }
+ }
+ }
+ }
+ return false;
+}
+
+RT_OFFLOAD_API_GROUP_END
+
+} // namespace Fortran::runtime::io
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/non-tbp-dio.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/non-tbp-dio.cpp
new file mode 100644
index 00000000000..72101b06e0c
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/non-tbp-dio.cpp
@@ -0,0 +1,32 @@
+//===-- lib/runtime/non-tbp-dio.cpp -----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang-rt/runtime/non-tbp-dio.h"
+#include "flang-rt/runtime/type-info.h"
+
+namespace Fortran::runtime::io {
+
+const NonTbpDefinedIo *NonTbpDefinedIoTable::Find(
+ const typeInfo::DerivedType &type, common::DefinedIo definedIo) const {
+ std::size_t j{items};
+ for (const auto *p{item}; j-- > 0; ++p) {
+ if (&p->derivedType == &type && p->definedIo == definedIo) {
+ return p;
+ } else if (p->isDtvArgPolymorphic) {
+ for (const typeInfo::DerivedType *t{type.GetParentType()}; t;
+ t = t->GetParentType()) {
+ if (&p->derivedType == t && p->definedIo == definedIo) {
+ return p;
+ }
+ }
+ }
+ }
+ return nullptr;
+}
+
+} // namespace Fortran::runtime::io
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/numeric.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/numeric.cpp
new file mode 100644
index 00000000000..37638765dc6
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/numeric.cpp
@@ -0,0 +1,938 @@
+//===-- lib/runtime/numeric.cpp ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang/Runtime/numeric.h"
+#include "flang-rt/runtime/numeric-templates.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+#include "flang/Common/float128.h"
+#include <cfloat>
+#include <climits>
+#include <cmath>
+#include <limits>
+
+namespace Fortran::runtime {
+
+template <typename RES>
+inline RT_API_ATTRS RES GetIntArgValue(const char *source, int line,
+ const void *arg, int kind, std::int64_t defaultValue, int resKind) {
+ RES res;
+ if (!arg) {
+ res = static_cast<RES>(defaultValue);
+ } else if (kind == 1) {
+ res = static_cast<RES>(
+ *static_cast<const CppTypeFor<TypeCategory::Integer, 1> *>(arg));
+ } else if (kind == 2) {
+ res = static_cast<RES>(
+ *static_cast<const CppTypeFor<TypeCategory::Integer, 2> *>(arg));
+ } else if (kind == 4) {
+ res = static_cast<RES>(
+ *static_cast<const CppTypeFor<TypeCategory::Integer, 4> *>(arg));
+ } else if (kind == 8) {
+ res = static_cast<RES>(
+ *static_cast<const CppTypeFor<TypeCategory::Integer, 8> *>(arg));
+#ifdef __SIZEOF_INT128__
+ } else if (kind == 16) {
+ if (resKind != 16) {
+ Terminator{source, line}.Crash("Unexpected integer kind in runtime");
+ }
+ res = static_cast<RES>(
+ *static_cast<const CppTypeFor<TypeCategory::Integer, 16> *>(arg));
+#endif
+ } else {
+ Terminator{source, line}.Crash("Unexpected integer kind in runtime");
+ }
+ return res;
+}
+
+// NINT (16.9.141)
+template <typename RESULT, typename ARG>
+inline RT_API_ATTRS RESULT Nint(ARG x) {
+ if (x >= 0) {
+ return std::trunc(x + ARG{0.5});
+ } else {
+ return std::trunc(x - ARG{0.5});
+ }
+}
+
+// CEILING & FLOOR (16.9.43, .79)
+template <typename RESULT, typename ARG>
+inline RT_API_ATTRS RESULT Ceiling(ARG x) {
+ return std::ceil(x);
+}
+template <typename RESULT, typename ARG>
+inline RT_API_ATTRS RESULT Floor(ARG x) {
+ return std::floor(x);
+}
+
+// MOD & MODULO (16.9.135, .136)
+template <bool IS_MODULO, typename T>
+inline RT_API_ATTRS T IntMod(T x, T p, const char *sourceFile, int sourceLine) {
+ if (p == 0) {
+ Terminator{sourceFile, sourceLine}.Crash(
+ IS_MODULO ? "MODULO with P==0" : "MOD with P==0");
+ }
+ auto mod{x - (x / p) * p};
+ if (IS_MODULO && (x > 0) != (p > 0)) {
+ mod += p;
+ }
+ return mod;
+}
+
+// SCALE (16.9.166)
+template <typename T> inline RT_API_ATTRS T Scale(T x, std::int64_t p) {
+ auto ip{static_cast<int>(p)};
+ if (ip != p) {
+ ip = p < 0 ? std::numeric_limits<int>::min()
+ : std::numeric_limits<int>::max();
+ }
+ return std::ldexp(x, ip); // x*2**p
+}
+
+// SELECTED_INT_KIND (16.9.169) and SELECTED_UNSIGNED_KIND extension
+template <typename X, typename M>
+inline RT_API_ATTRS CppTypeFor<TypeCategory::Integer, 4> SelectedIntKind(
+ X x, M mask) {
+#if !defined __SIZEOF_INT128__ || defined FLANG_RUNTIME_NO_INTEGER_16
+ mask &= ~(1 << 16);
+#endif
+ if (x <= 2 && (mask & (1 << 1))) {
+ return 1;
+ } else if (x <= 4 && (mask & (1 << 2))) {
+ return 2;
+ } else if (x <= 9 && (mask & (1 << 4))) {
+ return 4;
+ } else if (x <= 18 && (mask & (1 << 8))) {
+ return 8;
+ } else if (x <= 38 && (mask & (1 << 16))) {
+ return 16;
+ }
+ return -1;
+}
+
+// SELECTED_LOGICAL_KIND (F'2023 16.9.182)
+template <typename T>
+inline RT_API_ATTRS CppTypeFor<TypeCategory::Integer, 4> SelectedLogicalKind(
+ T x) {
+ if (x <= 8) {
+ return 1;
+ } else if (x <= 16) {
+ return 2;
+ } else if (x <= 32) {
+ return 4;
+ } else if (x <= 64) {
+ return 8;
+ }
+ return -1;
+}
+
+// SELECTED_REAL_KIND (16.9.170)
+template <typename P, typename R, typename D, typename M>
+inline RT_API_ATTRS CppTypeFor<TypeCategory::Integer, 4> SelectedRealKind(
+ P p, R r, D d, M mask) {
+ if (d != 2) {
+ return -5;
+ }
+#ifdef FLANG_RUNTIME_NO_REAL_2
+ mask &= ~(1 << 2);
+#endif
+#ifdef FLANG_RUNTIME_NO_REAL_3
+ mask &= ~(1 << 3);
+#endif
+#if !HAS_FLOAT80 || defined FLANG_RUNTIME_NO_REAL_10
+ mask &= ~(1 << 10);
+#endif
+#if LDBL_MANT_DIG < 64 || defined FLANG_RUNTIME_NO_REAL_16
+ mask &= ~(1 << 16);
+#endif
+
+ int error{0};
+ int kind{0};
+ if (p <= 3 && (mask & (1 << 2))) {
+ kind = 2;
+ } else if (p <= 6 && (mask & (1 << 4))) {
+ kind = 4;
+ } else if (p <= 15 && (mask & (1 << 8))) {
+ kind = 8;
+ } else if (p <= 18 && (mask & (1 << 10))) {
+ kind = 10;
+ } else if (p <= 33 && (mask & (1 << 16))) {
+ kind = 16;
+ } else {
+ error -= 1;
+ }
+
+ if (r <= 4 && (mask & (1 << 2))) {
+ kind = kind < 2 ? 2 : kind;
+ } else if (r <= 37 && p != 3 && (mask & (1 << 3))) {
+ kind = kind < 3 ? 3 : kind;
+ } else if (r <= 37 && (mask & (1 << 4))) {
+ kind = kind < 4 ? 4 : kind;
+ } else if (r <= 307 && (mask & (1 << 8))) {
+ kind = kind < 8 ? 8 : kind;
+ } else if (r <= 4931 && (mask & (1 << 10))) {
+ kind = kind < 10 ? 10 : kind;
+ } else if (r <= 4931 && (mask & (1 << 16))) {
+ kind = kind < 16 ? 16 : kind;
+ } else {
+ error -= 2;
+ }
+
+ return error ? error : kind;
+}
+
+// NEAREST (16.9.139)
+template <int PREC, typename T>
+inline RT_API_ATTRS T Nearest(T x, bool positive) {
+ if (positive) {
+ return std::nextafter(x, std::numeric_limits<T>::infinity());
+ } else {
+ return std::nextafter(x, -std::numeric_limits<T>::infinity());
+ }
+}
+
+// Exponentiation operator for (Real ** Integer) cases (10.1.5.2.1).
+template <typename BTy, typename ETy>
+RT_API_ATTRS BTy FPowI(BTy base, ETy exp) {
+ if (exp == ETy{0})
+ return BTy{1};
+ bool isNegativePower{exp < ETy{0}};
+ bool isMinPower{exp == std::numeric_limits<ETy>::min()};
+ if (isMinPower) {
+ exp = std::numeric_limits<ETy>::max();
+ } else if (isNegativePower) {
+ exp = -exp;
+ }
+ BTy result{1};
+ BTy origBase{base};
+ while (true) {
+ if (exp & ETy{1}) {
+ result *= base;
+ }
+ exp >>= 1;
+ if (exp == ETy{0}) {
+ break;
+ }
+ base *= base;
+ }
+ if (isMinPower) {
+ result *= origBase;
+ }
+ if (isNegativePower) {
+ result = BTy{1} / result;
+ }
+ return result;
+}
+
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+CppTypeFor<TypeCategory::Integer, 1> RTDEF(Ceiling4_1)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return Ceiling<CppTypeFor<TypeCategory::Integer, 1>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 2> RTDEF(Ceiling4_2)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return Ceiling<CppTypeFor<TypeCategory::Integer, 2>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(Ceiling4_4)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return Ceiling<CppTypeFor<TypeCategory::Integer, 4>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(Ceiling4_8)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return Ceiling<CppTypeFor<TypeCategory::Integer, 8>>(x);
+}
+#if defined __SIZEOF_INT128__ && !AVOID_NATIVE_UINT128_T
+CppTypeFor<TypeCategory::Integer, 16> RTDEF(Ceiling4_16)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return Ceiling<CppTypeFor<TypeCategory::Integer, 16>>(x);
+}
+#endif
+CppTypeFor<TypeCategory::Integer, 1> RTDEF(Ceiling8_1)(
+ CppTypeFor<TypeCategory::Real, 8> x) {
+ return Ceiling<CppTypeFor<TypeCategory::Integer, 1>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 2> RTDEF(Ceiling8_2)(
+ CppTypeFor<TypeCategory::Real, 8> x) {
+ return Ceiling<CppTypeFor<TypeCategory::Integer, 2>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(Ceiling8_4)(
+ CppTypeFor<TypeCategory::Real, 8> x) {
+ return Ceiling<CppTypeFor<TypeCategory::Integer, 4>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(Ceiling8_8)(
+ CppTypeFor<TypeCategory::Real, 8> x) {
+ return Ceiling<CppTypeFor<TypeCategory::Integer, 8>>(x);
+}
+#if defined __SIZEOF_INT128__ && !AVOID_NATIVE_UINT128_T
+CppTypeFor<TypeCategory::Integer, 16> RTDEF(Ceiling8_16)(
+ CppTypeFor<TypeCategory::Real, 8> x) {
+ return Ceiling<CppTypeFor<TypeCategory::Integer, 16>>(x);
+}
+#endif
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Integer, 1> RTDEF(Ceiling10_1)(
+ CppTypeFor<TypeCategory::Real, 10> x) {
+ return Ceiling<CppTypeFor<TypeCategory::Integer, 1>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 2> RTDEF(Ceiling10_2)(
+ CppTypeFor<TypeCategory::Real, 10> x) {
+ return Ceiling<CppTypeFor<TypeCategory::Integer, 2>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(Ceiling10_4)(
+ CppTypeFor<TypeCategory::Real, 10> x) {
+ return Ceiling<CppTypeFor<TypeCategory::Integer, 4>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(Ceiling10_8)(
+ CppTypeFor<TypeCategory::Real, 10> x) {
+ return Ceiling<CppTypeFor<TypeCategory::Integer, 8>>(x);
+}
+#if defined __SIZEOF_INT128__ && !AVOID_NATIVE_UINT128_T
+CppTypeFor<TypeCategory::Integer, 16> RTDEF(Ceiling10_16)(
+ CppTypeFor<TypeCategory::Real, 10> x) {
+ return Ceiling<CppTypeFor<TypeCategory::Integer, 16>>(x);
+}
+#endif
+#elif HAS_LDBL128
+CppTypeFor<TypeCategory::Integer, 1> RTDEF(Ceiling16_1)(
+ CppTypeFor<TypeCategory::Real, 16> x) {
+ return Ceiling<CppTypeFor<TypeCategory::Integer, 1>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 2> RTDEF(Ceiling16_2)(
+ CppTypeFor<TypeCategory::Real, 16> x) {
+ return Ceiling<CppTypeFor<TypeCategory::Integer, 2>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(Ceiling16_4)(
+ CppTypeFor<TypeCategory::Real, 16> x) {
+ return Ceiling<CppTypeFor<TypeCategory::Integer, 4>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(Ceiling16_8)(
+ CppTypeFor<TypeCategory::Real, 16> x) {
+ return Ceiling<CppTypeFor<TypeCategory::Integer, 8>>(x);
+}
+#if defined __SIZEOF_INT128__ && !AVOID_NATIVE_UINT128_T
+CppTypeFor<TypeCategory::Integer, 16> RTDEF(Ceiling16_16)(
+ CppTypeFor<TypeCategory::Real, 16> x) {
+ return Ceiling<CppTypeFor<TypeCategory::Integer, 16>>(x);
+}
+#endif
+#endif
+
+CppTypeFor<TypeCategory::Real, 4> RTDEF(ErfcScaled4)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return ErfcScaled(x);
+}
+CppTypeFor<TypeCategory::Real, 8> RTDEF(ErfcScaled8)(
+ CppTypeFor<TypeCategory::Real, 8> x) {
+ return ErfcScaled(x);
+}
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDEF(ErfcScaled10)(
+ CppTypeFor<TypeCategory::Real, 10> x) {
+ return ErfcScaled(x);
+}
+#endif
+#if HAS_LDBL128
+CppTypeFor<TypeCategory::Real, 16> RTDEF(ErfcScaled16)(
+ CppTypeFor<TypeCategory::Real, 16> x) {
+ return ErfcScaled(x);
+}
+#endif
+
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(Exponent4_4)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return Exponent<CppTypeFor<TypeCategory::Integer, 4>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(Exponent4_8)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return Exponent<CppTypeFor<TypeCategory::Integer, 8>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(Exponent8_4)(
+ CppTypeFor<TypeCategory::Real, 8> x) {
+ return Exponent<CppTypeFor<TypeCategory::Integer, 4>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(Exponent8_8)(
+ CppTypeFor<TypeCategory::Real, 8> x) {
+ return Exponent<CppTypeFor<TypeCategory::Integer, 8>>(x);
+}
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(Exponent10_4)(
+ CppTypeFor<TypeCategory::Real, 10> x) {
+ return Exponent<CppTypeFor<TypeCategory::Integer, 4>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(Exponent10_8)(
+ CppTypeFor<TypeCategory::Real, 10> x) {
+ return Exponent<CppTypeFor<TypeCategory::Integer, 8>>(x);
+}
+#endif
+
+CppTypeFor<TypeCategory::Integer, 1> RTDEF(Floor4_1)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return Floor<CppTypeFor<TypeCategory::Integer, 1>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 2> RTDEF(Floor4_2)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return Floor<CppTypeFor<TypeCategory::Integer, 2>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(Floor4_4)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return Floor<CppTypeFor<TypeCategory::Integer, 4>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(Floor4_8)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return Floor<CppTypeFor<TypeCategory::Integer, 8>>(x);
+}
+#if defined __SIZEOF_INT128__ && !AVOID_NATIVE_UINT128_T
+CppTypeFor<TypeCategory::Integer, 16> RTDEF(Floor4_16)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return Floor<CppTypeFor<TypeCategory::Integer, 16>>(x);
+}
+#endif
+CppTypeFor<TypeCategory::Integer, 1> RTDEF(Floor8_1)(
+ CppTypeFor<TypeCategory::Real, 8> x) {
+ return Floor<CppTypeFor<TypeCategory::Integer, 1>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 2> RTDEF(Floor8_2)(
+ CppTypeFor<TypeCategory::Real, 8> x) {
+ return Floor<CppTypeFor<TypeCategory::Integer, 2>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(Floor8_4)(
+ CppTypeFor<TypeCategory::Real, 8> x) {
+ return Floor<CppTypeFor<TypeCategory::Integer, 4>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(Floor8_8)(
+ CppTypeFor<TypeCategory::Real, 8> x) {
+ return Floor<CppTypeFor<TypeCategory::Integer, 8>>(x);
+}
+#if defined __SIZEOF_INT128__ && !AVOID_NATIVE_UINT128_T
+CppTypeFor<TypeCategory::Integer, 16> RTDEF(Floor8_16)(
+ CppTypeFor<TypeCategory::Real, 8> x) {
+ return Floor<CppTypeFor<TypeCategory::Integer, 16>>(x);
+}
+#endif
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Integer, 1> RTDEF(Floor10_1)(
+ CppTypeFor<TypeCategory::Real, 10> x) {
+ return Floor<CppTypeFor<TypeCategory::Integer, 1>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 2> RTDEF(Floor10_2)(
+ CppTypeFor<TypeCategory::Real, 10> x) {
+ return Floor<CppTypeFor<TypeCategory::Integer, 2>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(Floor10_4)(
+ CppTypeFor<TypeCategory::Real, 10> x) {
+ return Floor<CppTypeFor<TypeCategory::Integer, 4>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(Floor10_8)(
+ CppTypeFor<TypeCategory::Real, 10> x) {
+ return Floor<CppTypeFor<TypeCategory::Integer, 8>>(x);
+}
+#if defined __SIZEOF_INT128__ && !AVOID_NATIVE_UINT128_T
+CppTypeFor<TypeCategory::Integer, 16> RTDEF(Floor10_16)(
+ CppTypeFor<TypeCategory::Real, 10> x) {
+ return Floor<CppTypeFor<TypeCategory::Integer, 16>>(x);
+}
+#endif
+#elif HAS_LDBL128
+CppTypeFor<TypeCategory::Integer, 1> RTDEF(Floor16_1)(
+ CppTypeFor<TypeCategory::Real, 16> x) {
+ return Floor<CppTypeFor<TypeCategory::Integer, 1>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 2> RTDEF(Floor16_2)(
+ CppTypeFor<TypeCategory::Real, 16> x) {
+ return Floor<CppTypeFor<TypeCategory::Integer, 2>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(Floor16_4)(
+ CppTypeFor<TypeCategory::Real, 16> x) {
+ return Floor<CppTypeFor<TypeCategory::Integer, 4>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(Floor16_8)(
+ CppTypeFor<TypeCategory::Real, 16> x) {
+ return Floor<CppTypeFor<TypeCategory::Integer, 8>>(x);
+}
+#if defined __SIZEOF_INT128__ && !AVOID_NATIVE_UINT128_T
+CppTypeFor<TypeCategory::Integer, 16> RTDEF(Floor16_16)(
+ CppTypeFor<TypeCategory::Real, 16> x) {
+ return Floor<CppTypeFor<TypeCategory::Integer, 16>>(x);
+}
+#endif
+#endif
+
+CppTypeFor<TypeCategory::Real, 4> RTDEF(Fraction4)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return Fraction(x);
+}
+CppTypeFor<TypeCategory::Real, 8> RTDEF(Fraction8)(
+ CppTypeFor<TypeCategory::Real, 8> x) {
+ return Fraction(x);
+}
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDEF(Fraction10)(
+ CppTypeFor<TypeCategory::Real, 10> x) {
+ return Fraction(x);
+}
+#endif
+
+bool RTDEF(IsFinite4)(CppTypeFor<TypeCategory::Real, 4> x) {
+ return std::isfinite(x);
+}
+bool RTDEF(IsFinite8)(CppTypeFor<TypeCategory::Real, 8> x) {
+ return std::isfinite(x);
+}
+#if HAS_FLOAT80
+bool RTDEF(IsFinite10)(CppTypeFor<TypeCategory::Real, 10> x) {
+ return std::isfinite(x);
+}
+#elif HAS_LDBL128
+bool RTDEF(IsFinite16)(CppTypeFor<TypeCategory::Real, 16> x) {
+ return std::isfinite(x);
+}
+#endif
+
+bool RTDEF(IsNaN4)(CppTypeFor<TypeCategory::Real, 4> x) {
+ return std::isnan(x);
+}
+bool RTDEF(IsNaN8)(CppTypeFor<TypeCategory::Real, 8> x) {
+ return std::isnan(x);
+}
+#if HAS_FLOAT80
+bool RTDEF(IsNaN10)(CppTypeFor<TypeCategory::Real, 10> x) {
+ return std::isnan(x);
+}
+#elif HAS_LDBL128
+bool RTDEF(IsNaN16)(CppTypeFor<TypeCategory::Real, 16> x) {
+ return std::isnan(x);
+}
+#endif
+
+CppTypeFor<TypeCategory::Integer, 1> RTDEF(ModInteger1)(
+ CppTypeFor<TypeCategory::Integer, 1> x,
+ CppTypeFor<TypeCategory::Integer, 1> p, const char *sourceFile,
+ int sourceLine) {
+ return IntMod<false>(x, p, sourceFile, sourceLine);
+}
+CppTypeFor<TypeCategory::Integer, 2> RTDEF(ModInteger2)(
+ CppTypeFor<TypeCategory::Integer, 2> x,
+ CppTypeFor<TypeCategory::Integer, 2> p, const char *sourceFile,
+ int sourceLine) {
+ return IntMod<false>(x, p, sourceFile, sourceLine);
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(ModInteger4)(
+ CppTypeFor<TypeCategory::Integer, 4> x,
+ CppTypeFor<TypeCategory::Integer, 4> p, const char *sourceFile,
+ int sourceLine) {
+ return IntMod<false>(x, p, sourceFile, sourceLine);
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(ModInteger8)(
+ CppTypeFor<TypeCategory::Integer, 8> x,
+ CppTypeFor<TypeCategory::Integer, 8> p, const char *sourceFile,
+ int sourceLine) {
+ return IntMod<false>(x, p, sourceFile, sourceLine);
+}
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDEF(ModInteger16)(
+ CppTypeFor<TypeCategory::Integer, 16> x,
+ CppTypeFor<TypeCategory::Integer, 16> p, const char *sourceFile,
+ int sourceLine) {
+ return IntMod<false>(x, p, sourceFile, sourceLine);
+}
+#endif
+CppTypeFor<TypeCategory::Real, 4> RTDEF(ModReal4)(
+ CppTypeFor<TypeCategory::Real, 4> x, CppTypeFor<TypeCategory::Real, 4> p,
+ const char *sourceFile, int sourceLine) {
+ return RealMod<false>(x, p, sourceFile, sourceLine);
+}
+CppTypeFor<TypeCategory::Real, 8> RTDEF(ModReal8)(
+ CppTypeFor<TypeCategory::Real, 8> x, CppTypeFor<TypeCategory::Real, 8> p,
+ const char *sourceFile, int sourceLine) {
+ return RealMod<false>(x, p, sourceFile, sourceLine);
+}
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDEF(ModReal10)(
+ CppTypeFor<TypeCategory::Real, 10> x, CppTypeFor<TypeCategory::Real, 10> p,
+ const char *sourceFile, int sourceLine) {
+ return RealMod<false>(x, p, sourceFile, sourceLine);
+}
+#endif
+
+CppTypeFor<TypeCategory::Integer, 1> RTDEF(ModuloInteger1)(
+ CppTypeFor<TypeCategory::Integer, 1> x,
+ CppTypeFor<TypeCategory::Integer, 1> p, const char *sourceFile,
+ int sourceLine) {
+ return IntMod<true>(x, p, sourceFile, sourceLine);
+}
+CppTypeFor<TypeCategory::Integer, 2> RTDEF(ModuloInteger2)(
+ CppTypeFor<TypeCategory::Integer, 2> x,
+ CppTypeFor<TypeCategory::Integer, 2> p, const char *sourceFile,
+ int sourceLine) {
+ return IntMod<true>(x, p, sourceFile, sourceLine);
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(ModuloInteger4)(
+ CppTypeFor<TypeCategory::Integer, 4> x,
+ CppTypeFor<TypeCategory::Integer, 4> p, const char *sourceFile,
+ int sourceLine) {
+ return IntMod<true>(x, p, sourceFile, sourceLine);
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(ModuloInteger8)(
+ CppTypeFor<TypeCategory::Integer, 8> x,
+ CppTypeFor<TypeCategory::Integer, 8> p, const char *sourceFile,
+ int sourceLine) {
+ return IntMod<true>(x, p, sourceFile, sourceLine);
+}
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDEF(ModuloInteger16)(
+ CppTypeFor<TypeCategory::Integer, 16> x,
+ CppTypeFor<TypeCategory::Integer, 16> p, const char *sourceFile,
+ int sourceLine) {
+ return IntMod<true>(x, p, sourceFile, sourceLine);
+}
+#endif
+CppTypeFor<TypeCategory::Real, 4> RTDEF(ModuloReal4)(
+ CppTypeFor<TypeCategory::Real, 4> x, CppTypeFor<TypeCategory::Real, 4> p,
+ const char *sourceFile, int sourceLine) {
+ return RealMod<true>(x, p, sourceFile, sourceLine);
+}
+CppTypeFor<TypeCategory::Real, 8> RTDEF(ModuloReal8)(
+ CppTypeFor<TypeCategory::Real, 8> x, CppTypeFor<TypeCategory::Real, 8> p,
+ const char *sourceFile, int sourceLine) {
+ return RealMod<true>(x, p, sourceFile, sourceLine);
+}
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDEF(ModuloReal10)(
+ CppTypeFor<TypeCategory::Real, 10> x, CppTypeFor<TypeCategory::Real, 10> p,
+ const char *sourceFile, int sourceLine) {
+ return RealMod<true>(x, p, sourceFile, sourceLine);
+}
+#endif
+
+CppTypeFor<TypeCategory::Real, 4> RTDEF(Nearest4)(
+ CppTypeFor<TypeCategory::Real, 4> x, bool positive) {
+ return Nearest<24>(x, positive);
+}
+CppTypeFor<TypeCategory::Real, 8> RTDEF(Nearest8)(
+ CppTypeFor<TypeCategory::Real, 8> x, bool positive) {
+ return Nearest<53>(x, positive);
+}
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDEF(Nearest10)(
+ CppTypeFor<TypeCategory::Real, 10> x, bool positive) {
+ return Nearest<64>(x, positive);
+}
+#endif
+
+CppTypeFor<TypeCategory::Integer, 1> RTDEF(Nint4_1)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return Nint<CppTypeFor<TypeCategory::Integer, 1>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 2> RTDEF(Nint4_2)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return Nint<CppTypeFor<TypeCategory::Integer, 2>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(Nint4_4)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return Nint<CppTypeFor<TypeCategory::Integer, 4>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(Nint4_8)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return Nint<CppTypeFor<TypeCategory::Integer, 8>>(x);
+}
+#if defined __SIZEOF_INT128__ && !AVOID_NATIVE_UINT128_T
+CppTypeFor<TypeCategory::Integer, 16> RTDEF(Nint4_16)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return Nint<CppTypeFor<TypeCategory::Integer, 16>>(x);
+}
+#endif
+CppTypeFor<TypeCategory::Integer, 1> RTDEF(Nint8_1)(
+ CppTypeFor<TypeCategory::Real, 8> x) {
+ return Nint<CppTypeFor<TypeCategory::Integer, 1>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 2> RTDEF(Nint8_2)(
+ CppTypeFor<TypeCategory::Real, 8> x) {
+ return Nint<CppTypeFor<TypeCategory::Integer, 2>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(Nint8_4)(
+ CppTypeFor<TypeCategory::Real, 8> x) {
+ return Nint<CppTypeFor<TypeCategory::Integer, 4>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(Nint8_8)(
+ CppTypeFor<TypeCategory::Real, 8> x) {
+ return Nint<CppTypeFor<TypeCategory::Integer, 8>>(x);
+}
+#if defined __SIZEOF_INT128__ && !AVOID_NATIVE_UINT128_T
+CppTypeFor<TypeCategory::Integer, 16> RTDEF(Nint8_16)(
+ CppTypeFor<TypeCategory::Real, 8> x) {
+ return Nint<CppTypeFor<TypeCategory::Integer, 16>>(x);
+}
+#endif
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Integer, 1> RTDEF(Nint10_1)(
+ CppTypeFor<TypeCategory::Real, 10> x) {
+ return Nint<CppTypeFor<TypeCategory::Integer, 1>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 2> RTDEF(Nint10_2)(
+ CppTypeFor<TypeCategory::Real, 10> x) {
+ return Nint<CppTypeFor<TypeCategory::Integer, 2>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(Nint10_4)(
+ CppTypeFor<TypeCategory::Real, 10> x) {
+ return Nint<CppTypeFor<TypeCategory::Integer, 4>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(Nint10_8)(
+ CppTypeFor<TypeCategory::Real, 10> x) {
+ return Nint<CppTypeFor<TypeCategory::Integer, 8>>(x);
+}
+#if defined __SIZEOF_INT128__ && !AVOID_NATIVE_UINT128_T
+CppTypeFor<TypeCategory::Integer, 16> RTDEF(Nint10_16)(
+ CppTypeFor<TypeCategory::Real, 10> x) {
+ return Nint<CppTypeFor<TypeCategory::Integer, 16>>(x);
+}
+#endif
+#elif HAS_LDBL128
+CppTypeFor<TypeCategory::Integer, 1> RTDEF(Nint16_1)(
+ CppTypeFor<TypeCategory::Real, 16> x) {
+ return Nint<CppTypeFor<TypeCategory::Integer, 1>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 2> RTDEF(Nint16_2)(
+ CppTypeFor<TypeCategory::Real, 16> x) {
+ return Nint<CppTypeFor<TypeCategory::Integer, 2>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(Nint16_4)(
+ CppTypeFor<TypeCategory::Real, 16> x) {
+ return Nint<CppTypeFor<TypeCategory::Integer, 4>>(x);
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(Nint16_8)(
+ CppTypeFor<TypeCategory::Real, 16> x) {
+ return Nint<CppTypeFor<TypeCategory::Integer, 8>>(x);
+}
+#if defined __SIZEOF_INT128__ && !AVOID_NATIVE_UINT128_T
+CppTypeFor<TypeCategory::Integer, 16> RTDEF(Nint16_16)(
+ CppTypeFor<TypeCategory::Real, 16> x) {
+ return Nint<CppTypeFor<TypeCategory::Integer, 16>>(x);
+}
+#endif
+#endif
+
+CppTypeFor<TypeCategory::Real, 4> RTDEF(RRSpacing4)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return RRSpacing<24>(x);
+}
+CppTypeFor<TypeCategory::Real, 8> RTDEF(RRSpacing8)(
+ CppTypeFor<TypeCategory::Real, 8> x) {
+ return RRSpacing<53>(x);
+}
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDEF(RRSpacing10)(
+ CppTypeFor<TypeCategory::Real, 10> x) {
+ return RRSpacing<64>(x);
+}
+#endif
+
+CppTypeFor<TypeCategory::Real, 4> RTDEF(SetExponent4)(
+ CppTypeFor<TypeCategory::Real, 4> x, std::int64_t p) {
+ return SetExponent(x, p);
+}
+CppTypeFor<TypeCategory::Real, 8> RTDEF(SetExponent8)(
+ CppTypeFor<TypeCategory::Real, 8> x, std::int64_t p) {
+ return SetExponent(x, p);
+}
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDEF(SetExponent10)(
+ CppTypeFor<TypeCategory::Real, 10> x, std::int64_t p) {
+ return SetExponent(x, p);
+}
+#endif
+
+CppTypeFor<TypeCategory::Real, 4> RTDEF(Scale4)(
+ CppTypeFor<TypeCategory::Real, 4> x, std::int64_t p) {
+ return Scale(x, p);
+}
+CppTypeFor<TypeCategory::Real, 8> RTDEF(Scale8)(
+ CppTypeFor<TypeCategory::Real, 8> x, std::int64_t p) {
+ return Scale(x, p);
+}
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDEF(Scale10)(
+ CppTypeFor<TypeCategory::Real, 10> x, std::int64_t p) {
+ return Scale(x, p);
+}
+#endif
+
+// SELECTED_CHAR_KIND
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(SelectedCharKind)(
+ const char *source, int line, const char *x, std::size_t length) {
+ static const char *keywords[]{
+ "ASCII", "DEFAULT", "UCS-2", "ISO_10646", "UCS-4", nullptr};
+ switch (IdentifyValue(x, length, keywords)) {
+ case 0: // ASCII
+ case 1: // DEFAULT
+ return 1;
+ case 2: // UCS-2
+ return 2;
+ case 3: // ISO_10646
+ case 4: // UCS-4
+ return 4;
+ default:
+ return -1;
+ }
+}
+// SELECTED_INT_KIND and SELECTED_UNSIGNED_KIND extension
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(SelectedIntKind)(
+ const char *source, int line, void *x, int xKind) {
+ return RTNAME(SelectedIntKindMasked)(source, line, x, xKind,
+ (1 << 1) | (1 << 2) | (1 << 4) | (1 << 8) | (1 << 16));
+}
+
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(SelectedIntKindMasked)(
+ const char *source, int line, void *x, int xKind, int mask) {
+#ifdef __SIZEOF_INT128__
+ CppTypeFor<TypeCategory::Integer, 16> r =
+ GetIntArgValue<CppTypeFor<TypeCategory::Integer, 16>>(
+ source, line, x, xKind, /*defaultValue*/ 0, /*resKind*/ 16);
+#else
+ std::int64_t r = GetIntArgValue<std::int64_t>(
+ source, line, x, xKind, /*defaultValue*/ 0, /*resKind*/ 8);
+#endif
+ return SelectedIntKind(r, mask);
+}
+
+// SELECTED_LOGICAL_KIND
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(SelectedLogicalKind)(
+ const char *source, int line, void *x, int xKind) {
+#ifdef __SIZEOF_INT128__
+ CppTypeFor<TypeCategory::Integer, 16> r =
+ GetIntArgValue<CppTypeFor<TypeCategory::Integer, 16>>(
+ source, line, x, xKind, /*defaultValue*/ 0, /*resKind*/ 16);
+#else
+ std::int64_t r = GetIntArgValue<std::int64_t>(
+ source, line, x, xKind, /*defaultValue*/ 0, /*resKind*/ 8);
+#endif
+ return SelectedLogicalKind(r);
+}
+
+// SELECTED_REAL_KIND
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(SelectedRealKind)(const char *source,
+ int line, void *precision, int pKind, void *range, int rKind, void *radix,
+ int dKind) {
+ return RTNAME(SelectedRealKindMasked)(source, line, precision, pKind, range,
+ rKind, radix, dKind,
+ (1 << 2) | (1 << 3) | (1 << 4) | (1 << 8) | (1 << 10) | (1 << 16));
+}
+
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(SelectedRealKindMasked)(
+ const char *source, int line, void *precision, int pKind, void *range,
+ int rKind, void *radix, int dKind, int mask) {
+#ifdef __SIZEOF_INT128__
+ CppTypeFor<TypeCategory::Integer, 16> p =
+ GetIntArgValue<CppTypeFor<TypeCategory::Integer, 16>>(
+ source, line, precision, pKind, /*defaultValue*/ 0, /*resKind*/ 16);
+ CppTypeFor<TypeCategory::Integer, 16> r =
+ GetIntArgValue<CppTypeFor<TypeCategory::Integer, 16>>(
+ source, line, range, rKind, /*defaultValue*/ 0, /*resKind*/ 16);
+ CppTypeFor<TypeCategory::Integer, 16> d =
+ GetIntArgValue<CppTypeFor<TypeCategory::Integer, 16>>(
+ source, line, radix, dKind, /*defaultValue*/ 2, /*resKind*/ 16);
+#else
+ std::int64_t p = GetIntArgValue<std::int64_t>(
+ source, line, precision, pKind, /*defaultValue*/ 0, /*resKind*/ 8);
+ std::int64_t r = GetIntArgValue<std::int64_t>(
+ source, line, range, rKind, /*defaultValue*/ 0, /*resKind*/ 8);
+ std::int64_t d = GetIntArgValue<std::int64_t>(
+ source, line, radix, dKind, /*defaultValue*/ 2, /*resKind*/ 8);
+#endif
+ return SelectedRealKind(p, r, d, mask);
+}
+
+#if HAS_FP16
+CppTypeFor<TypeCategory::Real, 2> RTDEF(Spacing2)(
+ CppTypeFor<TypeCategory::Real, 2> x) {
+ return Spacing<11>(x);
+}
+#endif
+CppTypeFor<TypeCategory::Real, 4> RTDEF(Spacing2By4)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return Spacing<11>(x);
+}
+#if HAS_BF16
+CppTypeFor<TypeCategory::Real, 3> RTDEF(Spacing3)(
+ CppTypeFor<TypeCategory::Real, 3> x) {
+ return Spacing<8>(x);
+}
+#endif
+CppTypeFor<TypeCategory::Real, 4> RTDEF(Spacing3By4)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return Spacing<8>(x);
+}
+CppTypeFor<TypeCategory::Real, 4> RTDEF(Spacing4)(
+ CppTypeFor<TypeCategory::Real, 4> x) {
+ return Spacing<24>(x);
+}
+CppTypeFor<TypeCategory::Real, 8> RTDEF(Spacing8)(
+ CppTypeFor<TypeCategory::Real, 8> x) {
+ return Spacing<53>(x);
+}
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDEF(Spacing10)(
+ CppTypeFor<TypeCategory::Real, 10> x) {
+ return Spacing<64>(x);
+}
+#endif
+
+CppTypeFor<TypeCategory::Real, 4> RTDEF(FPow4i)(
+ CppTypeFor<TypeCategory::Real, 4> b,
+ CppTypeFor<TypeCategory::Integer, 4> e) {
+ return FPowI(b, e);
+}
+CppTypeFor<TypeCategory::Real, 8> RTDEF(FPow8i)(
+ CppTypeFor<TypeCategory::Real, 8> b,
+ CppTypeFor<TypeCategory::Integer, 4> e) {
+ return FPowI(b, e);
+}
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDEF(FPow10i)(
+ CppTypeFor<TypeCategory::Real, 10> b,
+ CppTypeFor<TypeCategory::Integer, 4> e) {
+ return FPowI(b, e);
+}
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppTypeFor<TypeCategory::Real, 16> RTDEF(FPow16i)(
+ CppTypeFor<TypeCategory::Real, 16> b,
+ CppTypeFor<TypeCategory::Integer, 4> e) {
+ return FPowI(b, e);
+}
+#endif
+
+CppTypeFor<TypeCategory::Real, 4> RTDEF(FPow4k)(
+ CppTypeFor<TypeCategory::Real, 4> b,
+ CppTypeFor<TypeCategory::Integer, 8> e) {
+ return FPowI(b, e);
+}
+CppTypeFor<TypeCategory::Real, 8> RTDEF(FPow8k)(
+ CppTypeFor<TypeCategory::Real, 8> b,
+ CppTypeFor<TypeCategory::Integer, 8> e) {
+ return FPowI(b, e);
+}
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDEF(FPow10k)(
+ CppTypeFor<TypeCategory::Real, 10> b,
+ CppTypeFor<TypeCategory::Integer, 8> e) {
+ return FPowI(b, e);
+}
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppTypeFor<TypeCategory::Real, 16> RTDEF(FPow16k)(
+ CppTypeFor<TypeCategory::Real, 16> b,
+ CppTypeFor<TypeCategory::Integer, 8> e) {
+ return FPowI(b, e);
+}
+#endif
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/pointer.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/pointer.cpp
new file mode 100644
index 00000000000..04487abd327
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/pointer.cpp
@@ -0,0 +1,283 @@
+//===-- lib/runtime/pointer.cpp ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang/Runtime/pointer.h"
+#include "flang-rt/runtime/allocator-registry.h"
+#include "flang-rt/runtime/assign-impl.h"
+#include "flang-rt/runtime/derived.h"
+#include "flang-rt/runtime/environment.h"
+#include "flang-rt/runtime/stat.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+#include "flang-rt/runtime/type-info.h"
+
+namespace Fortran::runtime {
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+void RTDEF(PointerNullifyIntrinsic)(Descriptor &pointer, TypeCategory category,
+ int kind, int rank, int corank) {
+ INTERNAL_CHECK(corank == 0);
+ pointer.Establish(TypeCode{category, kind},
+ Descriptor::BytesFor(category, kind), nullptr, rank, nullptr,
+ CFI_attribute_pointer);
+}
+
+void RTDEF(PointerNullifyCharacter)(Descriptor &pointer, SubscriptValue length,
+ int kind, int rank, int corank) {
+ INTERNAL_CHECK(corank == 0);
+ pointer.Establish(
+ kind, length, nullptr, rank, nullptr, CFI_attribute_pointer);
+}
+
+void RTDEF(PointerNullifyDerived)(Descriptor &pointer,
+ const typeInfo::DerivedType &derivedType, int rank, int corank) {
+ INTERNAL_CHECK(corank == 0);
+ pointer.Establish(derivedType, nullptr, rank, nullptr, CFI_attribute_pointer);
+}
+
+void RTDEF(PointerSetBounds)(Descriptor &pointer, int zeroBasedDim,
+ SubscriptValue lower, SubscriptValue upper) {
+ INTERNAL_CHECK(zeroBasedDim >= 0 && zeroBasedDim < pointer.rank());
+ pointer.GetDimension(zeroBasedDim).SetBounds(lower, upper);
+ // The byte strides are computed when the pointer is allocated.
+}
+
+// TODO: PointerSetCoBounds
+
+void RTDEF(PointerSetDerivedLength)(
+ Descriptor &pointer, int which, SubscriptValue x) {
+ DescriptorAddendum *addendum{pointer.Addendum()};
+ INTERNAL_CHECK(addendum != nullptr);
+ addendum->SetLenParameterValue(which, x);
+}
+
+void RTDEF(PointerApplyMold)(
+ Descriptor &pointer, const Descriptor &mold, int rank) {
+ pointer.ApplyMold(mold, rank);
+}
+
+void RTDEF(PointerAssociateScalar)(Descriptor &pointer, void *target) {
+ pointer.set_base_addr(target);
+}
+
+void RTDEF(PointerAssociate)(Descriptor &pointer, const Descriptor &target) {
+ pointer = target;
+ pointer.raw().attribute = CFI_attribute_pointer;
+}
+
+void RTDEF(PointerAssociateLowerBounds)(Descriptor &pointer,
+ const Descriptor &target, const Descriptor &lowerBounds) {
+ pointer = target;
+ pointer.raw().attribute = CFI_attribute_pointer;
+ int rank{pointer.rank()};
+ Terminator terminator{__FILE__, __LINE__};
+ std::size_t boundElementBytes{lowerBounds.ElementBytes()};
+ for (int j{0}; j < rank; ++j) {
+ Dimension &dim{pointer.GetDimension(j)};
+ dim.SetLowerBound(dim.Extent() == 0
+ ? 1
+ : GetInt64(lowerBounds.ZeroBasedIndexedElement<const char>(j),
+ boundElementBytes, terminator));
+ }
+}
+
+void RTDEF(PointerAssociateRemapping)(Descriptor &pointer,
+ const Descriptor &target, const Descriptor &bounds, const char *sourceFile,
+ int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ SubscriptValue byteStride{/*captured from first dimension*/};
+ std::size_t boundElementBytes{bounds.ElementBytes()};
+ std::size_t boundsRank{
+ static_cast<std::size_t>(bounds.GetDimension(1).Extent())};
+ // We cannot just assign target into pointer descriptor, because
+ // the ranks may mismatch. Use target as a mold for initializing
+ // the pointer descriptor.
+ INTERNAL_CHECK(static_cast<std::size_t>(pointer.rank()) == boundsRank);
+ pointer.ApplyMold(target, boundsRank);
+ pointer.set_base_addr(target.raw().base_addr);
+ pointer.raw().attribute = CFI_attribute_pointer;
+ for (unsigned j{0}; j < boundsRank; ++j) {
+ auto &dim{pointer.GetDimension(j)};
+ dim.SetBounds(GetInt64(bounds.ZeroBasedIndexedElement<const char>(2 * j),
+ boundElementBytes, terminator),
+ GetInt64(bounds.ZeroBasedIndexedElement<const char>(2 * j + 1),
+ boundElementBytes, terminator));
+ if (j == 0) {
+ byteStride = dim.ByteStride() * dim.Extent();
+ } else {
+ dim.SetByteStride(byteStride);
+ byteStride *= dim.Extent();
+ }
+ }
+ std::size_t pointerElements{pointer.Elements()};
+ std::size_t targetElements{target.Elements()};
+ if (pointerElements > targetElements) {
+ terminator.Crash("PointerAssociateRemapping: too many elements in remapped "
+ "pointer (%zd > %zd)",
+ pointerElements, targetElements);
+ }
+}
+
+RT_API_ATTRS void *AllocateValidatedPointerPayload(
+ std::size_t byteSize, int allocatorIdx) {
+ // Add space for a footer to validate during deallocation.
+ constexpr std::size_t align{sizeof(std::uintptr_t)};
+ byteSize = ((byteSize + align - 1) / align) * align;
+ std::size_t total{byteSize + sizeof(std::uintptr_t)};
+ AllocFct alloc{allocatorRegistry.GetAllocator(allocatorIdx)};
+ void *p{alloc(total, /*asyncObject=*/nullptr)};
+ if (p && allocatorIdx == 0) {
+ // Fill the footer word with the XOR of the ones' complement of
+ // the base address, which is a value that would be highly unlikely
+ // to appear accidentally at the right spot.
+ std::uintptr_t *footer{
+ reinterpret_cast<std::uintptr_t *>(static_cast<char *>(p) + byteSize)};
+ *footer = ~reinterpret_cast<std::uintptr_t>(p);
+ }
+ return p;
+}
+
+int RTDEF(PointerAllocate)(Descriptor &pointer, bool hasStat,
+ const Descriptor *errMsg, const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ if (!pointer.IsPointer()) {
+ return ReturnError(terminator, StatInvalidDescriptor, errMsg, hasStat);
+ }
+ std::size_t elementBytes{pointer.ElementBytes()};
+ if (static_cast<std::int64_t>(elementBytes) < 0) {
+ // F'2023 7.4.4.2 p5: "If the character length parameter value evaluates
+ // to a negative value, the length of character entities declared is zero."
+ elementBytes = pointer.raw().elem_len = 0;
+ }
+ std::size_t byteSize{pointer.Elements() * elementBytes};
+ void *p{AllocateValidatedPointerPayload(byteSize, pointer.GetAllocIdx())};
+ if (!p) {
+ return ReturnError(terminator, CFI_ERROR_MEM_ALLOCATION, errMsg, hasStat);
+ }
+ pointer.set_base_addr(p);
+ pointer.SetByteStrides();
+ int stat{StatOk};
+ if (const DescriptorAddendum * addendum{pointer.Addendum()}) {
+ if (const auto *derived{addendum->derivedType()}) {
+ if (!derived->noInitializationNeeded()) {
+ stat = Initialize(pointer, *derived, terminator, hasStat, errMsg);
+ }
+ }
+ }
+ return ReturnError(terminator, stat, errMsg, hasStat);
+}
+
+int RTDEF(PointerAllocateSource)(Descriptor &pointer, const Descriptor &source,
+ bool hasStat, const Descriptor *errMsg, const char *sourceFile,
+ int sourceLine) {
+ int stat{RTNAME(PointerAllocate)(
+ pointer, hasStat, errMsg, sourceFile, sourceLine)};
+ if (stat == StatOk) {
+ Terminator terminator{sourceFile, sourceLine};
+ DoFromSourceAssign(pointer, source, terminator);
+ }
+ return stat;
+}
+
+static RT_API_ATTRS std::size_t GetByteSize(
+ const ISO::CFI_cdesc_t &descriptor) {
+ std::size_t rank{descriptor.rank};
+ const ISO::CFI_dim_t *dim{descriptor.dim};
+ std::size_t byteSize{descriptor.elem_len};
+ for (std::size_t j{0}; j < rank; ++j) {
+ byteSize *= dim[j].extent;
+ }
+ return byteSize;
+}
+
+bool RT_API_ATTRS ValidatePointerPayload(const ISO::CFI_cdesc_t &desc) {
+ std::size_t byteSize{GetByteSize(desc)};
+ constexpr std::size_t align{sizeof(std::uintptr_t)};
+ byteSize = ((byteSize + align - 1) / align) * align;
+ const void *p{desc.base_addr};
+ const std::uintptr_t *footer{reinterpret_cast<const std::uintptr_t *>(
+ static_cast<const char *>(p) + byteSize)};
+ return *footer == ~reinterpret_cast<std::uintptr_t>(p);
+}
+
+int RTDEF(PointerDeallocate)(Descriptor &pointer, bool hasStat,
+ const Descriptor *errMsg, const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ if (!pointer.IsPointer()) {
+ return ReturnError(terminator, StatInvalidDescriptor, errMsg, hasStat);
+ }
+ if (!pointer.IsAllocated()) {
+ return ReturnError(terminator, StatBaseNull, errMsg, hasStat);
+ }
+ if (executionEnvironment.checkPointerDeallocation &&
+ pointer.GetAllocIdx() == kDefaultAllocator &&
+ !ValidatePointerPayload(pointer.raw())) {
+ return ReturnError(terminator, StatBadPointerDeallocation, errMsg, hasStat);
+ }
+ return ReturnError(terminator,
+ pointer.Destroy(/*finalize=*/true, /*destroyPointers=*/true, &terminator),
+ errMsg, hasStat);
+}
+
+int RTDEF(PointerDeallocatePolymorphic)(Descriptor &pointer,
+ const typeInfo::DerivedType *derivedType, bool hasStat,
+ const Descriptor *errMsg, const char *sourceFile, int sourceLine) {
+ int stat{RTNAME(PointerDeallocate)(
+ pointer, hasStat, errMsg, sourceFile, sourceLine)};
+ if (stat == StatOk) {
+ if (DescriptorAddendum * addendum{pointer.Addendum()}) {
+ addendum->set_derivedType(derivedType);
+ pointer.raw().type = derivedType ? CFI_type_struct : CFI_type_other;
+ } else {
+ // Unlimited polymorphic descriptors initialized with
+ // PointerNullifyIntrinsic do not have an addendum. Make sure the
+ // derivedType is null in that case.
+ INTERNAL_CHECK(!derivedType);
+ pointer.raw().type = CFI_type_other;
+ }
+ }
+ return stat;
+}
+
+bool RTDEF(PointerIsAssociated)(const Descriptor &pointer) {
+ return pointer.raw().base_addr != nullptr;
+}
+
+bool RTDEF(PointerIsAssociatedWith)(
+ const Descriptor &pointer, const Descriptor *target) {
+ if (!target) {
+ return pointer.raw().base_addr != nullptr;
+ }
+ if (!target->raw().base_addr ||
+ (target->raw().type != CFI_type_struct && target->ElementBytes() == 0)) {
+ return false;
+ }
+ int rank{pointer.rank()};
+ if (pointer.raw().base_addr != target->raw().base_addr ||
+ pointer.ElementBytes() != target->ElementBytes() ||
+ rank != target->rank()) {
+ return false;
+ }
+ for (int j{0}; j < rank; ++j) {
+ const Dimension &pDim{pointer.GetDimension(j)};
+ const Dimension &tDim{target->GetDimension(j)};
+ auto pExtent{pDim.Extent()};
+ if (pExtent == 0 || pExtent != tDim.Extent() ||
+ (pExtent != 1 && pDim.ByteStride() != tDim.ByteStride())) {
+ return false;
+ }
+ }
+ return true;
+}
+
+// TODO: PointerCheckLengthParameter
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/product.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/product.cpp
new file mode 100644
index 00000000000..02fdc2bfcd5
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/product.cpp
@@ -0,0 +1,214 @@
+//===-- lib/runtime/product.cpp ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Implements PRODUCT for all required operand types and shapes.
+
+#include "flang-rt/runtime/reduction-templates.h"
+#include "flang/Common/float128.h"
+#include "flang/Runtime/reduction.h"
+#include <cfloat>
+#include <cinttypes>
+#include <complex>
+
+namespace Fortran::runtime {
+template <typename INTERMEDIATE> class NonComplexProductAccumulator {
+public:
+ explicit RT_API_ATTRS NonComplexProductAccumulator(const Descriptor &array)
+ : array_{array} {}
+ RT_API_ATTRS void Reinitialize() { product_ = 1; }
+ template <typename A>
+ RT_API_ATTRS void GetResult(A *p, int /*zeroBasedDim*/ = -1) const {
+ *p = static_cast<A>(product_);
+ }
+ template <typename A>
+ RT_API_ATTRS bool AccumulateAt(const SubscriptValue at[]) {
+ product_ *= *array_.Element<A>(at);
+ return product_ != 0;
+ }
+
+private:
+ const Descriptor &array_;
+ INTERMEDIATE product_{1};
+};
+
+template <typename PART> class ComplexProductAccumulator {
+public:
+ explicit RT_API_ATTRS ComplexProductAccumulator(const Descriptor &array)
+ : array_{array} {}
+ RT_API_ATTRS void Reinitialize() { product_ = rtcmplx::complex<PART>{1, 0}; }
+ template <typename A>
+ RT_API_ATTRS void GetResult(A *p, int /*zeroBasedDim*/ = -1) const {
+ using ResultPart = typename A::value_type;
+ *p = {static_cast<ResultPart>(product_.real()),
+ static_cast<ResultPart>(product_.imag())};
+ }
+ template <typename A>
+ RT_API_ATTRS bool AccumulateAt(const SubscriptValue at[]) {
+ product_ *= *array_.Element<A>(at);
+ return true;
+ }
+
+private:
+ const Descriptor &array_;
+ rtcmplx::complex<PART> product_{1, 0};
+};
+
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+CppTypeFor<TypeCategory::Integer, 1> RTDEF(ProductInteger1)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 1>(x, source, line, dim, mask,
+ NonComplexProductAccumulator<CppTypeFor<TypeCategory::Integer, 4>>{x},
+ "PRODUCT");
+}
+CppTypeFor<TypeCategory::Integer, 2> RTDEF(ProductInteger2)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 2>(x, source, line, dim, mask,
+ NonComplexProductAccumulator<CppTypeFor<TypeCategory::Integer, 4>>{x},
+ "PRODUCT");
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(ProductInteger4)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 4>(x, source, line, dim, mask,
+ NonComplexProductAccumulator<CppTypeFor<TypeCategory::Integer, 4>>{x},
+ "PRODUCT");
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(ProductInteger8)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 8>(x, source, line, dim, mask,
+ NonComplexProductAccumulator<CppTypeFor<TypeCategory::Integer, 8>>{x},
+ "PRODUCT");
+}
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDEF(ProductInteger16)(
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 16>(x, source, line, dim,
+ mask,
+ NonComplexProductAccumulator<CppTypeFor<TypeCategory::Integer, 16>>{x},
+ "PRODUCT");
+}
+#endif
+
+CppTypeFor<TypeCategory::Unsigned, 1> RTDEF(ProductUnsigned1)(
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Unsigned, 1>(x, source, line, dim,
+ mask,
+ NonComplexProductAccumulator<CppTypeFor<TypeCategory::Unsigned, 4>>{x},
+ "PRODUCT");
+}
+CppTypeFor<TypeCategory::Unsigned, 2> RTDEF(ProductUnsigned2)(
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Unsigned, 2>(x, source, line, dim,
+ mask,
+ NonComplexProductAccumulator<CppTypeFor<TypeCategory::Unsigned, 4>>{x},
+ "PRODUCT");
+}
+CppTypeFor<TypeCategory::Unsigned, 4> RTDEF(ProductUnsigned4)(
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Unsigned, 4>(x, source, line, dim,
+ mask,
+ NonComplexProductAccumulator<CppTypeFor<TypeCategory::Unsigned, 4>>{x},
+ "PRODUCT");
+}
+CppTypeFor<TypeCategory::Unsigned, 8> RTDEF(ProductUnsigned8)(
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Unsigned, 8>(x, source, line, dim,
+ mask,
+ NonComplexProductAccumulator<CppTypeFor<TypeCategory::Unsigned, 8>>{x},
+ "PRODUCT");
+}
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Unsigned, 16> RTDEF(ProductUnsigned16)(
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Unsigned, 16>(x, source, line, dim,
+ mask,
+ NonComplexProductAccumulator<CppTypeFor<TypeCategory::Unsigned, 16>>{x},
+ "PRODUCT");
+}
+#endif
+
+// TODO: real/complex(2 & 3)
+CppTypeFor<TypeCategory::Real, 4> RTDEF(ProductReal4)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Real, 4>(x, source, line, dim, mask,
+ NonComplexProductAccumulator<CppTypeFor<TypeCategory::Real, 4>>{x},
+ "PRODUCT");
+}
+CppTypeFor<TypeCategory::Real, 8> RTDEF(ProductReal8)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Real, 8>(x, source, line, dim, mask,
+ NonComplexProductAccumulator<CppTypeFor<TypeCategory::Real, 8>>{x},
+ "PRODUCT");
+}
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDEF(ProductReal10)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Real, 10>(x, source, line, dim, mask,
+ NonComplexProductAccumulator<CppTypeFor<TypeCategory::Real, 10>>{x},
+ "PRODUCT");
+}
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppTypeFor<TypeCategory::Real, 16> RTDEF(ProductReal16)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Real, 16>(x, source, line, dim, mask,
+ NonComplexProductAccumulator<CppTypeFor<TypeCategory::Real, 16>>{x},
+ "PRODUCT");
+}
+#endif
+
+void RTDEF(CppProductComplex4)(CppTypeFor<TypeCategory::Complex, 4> &result,
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ result = GetTotalReduction<TypeCategory::Complex, 4>(x, source, line, dim,
+ mask, ComplexProductAccumulator<CppTypeFor<TypeCategory::Real, 4>>{x},
+ "PRODUCT");
+}
+void RTDEF(CppProductComplex8)(CppTypeFor<TypeCategory::Complex, 8> &result,
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ result = GetTotalReduction<TypeCategory::Complex, 8>(x, source, line, dim,
+ mask, ComplexProductAccumulator<CppTypeFor<TypeCategory::Real, 8>>{x},
+ "PRODUCT");
+}
+#if HAS_FLOAT80
+void RTDEF(CppProductComplex10)(CppTypeFor<TypeCategory::Complex, 10> &result,
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ result = GetTotalReduction<TypeCategory::Complex, 10>(x, source, line, dim,
+ mask, ComplexProductAccumulator<CppTypeFor<TypeCategory::Real, 10>>{x},
+ "PRODUCT");
+}
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+void RTDEF(CppProductComplex16)(CppTypeFor<TypeCategory::Complex, 16> &result,
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ result = GetTotalReduction<TypeCategory::Complex, 16>(x, source, line, dim,
+ mask, ComplexProductAccumulator<CppTypeFor<TypeCategory::Real, 16>>{x},
+ "PRODUCT");
+}
+#endif
+
+void RTDEF(ProductDim)(Descriptor &result, const Descriptor &x, int dim,
+ const char *source, int line, const Descriptor *mask) {
+ TypedPartialNumericReduction<NonComplexProductAccumulator,
+ NonComplexProductAccumulator, ComplexProductAccumulator,
+ /*MIN_REAL_KIND=*/4>(result, x, dim, source, line, mask, "PRODUCT");
+}
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/pseudo-unit.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/pseudo-unit.cpp
new file mode 100644
index 00000000000..7e1f3bc86b2
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/pseudo-unit.cpp
@@ -0,0 +1,169 @@
+//===-- lib/runtime/pseudo-unit.cpp -----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Implemenation of ExternalFileUnit and PseudoOpenFile for
+// RT_USE_PSEUDO_FILE_UNIT=1.
+//
+//===----------------------------------------------------------------------===//
+
+#include "unit.h"
+#include "flang-rt/runtime/io-error.h"
+#include "flang-rt/runtime/tools.h"
+
+// NOTE: the header files above may define OpenMP declare target
+// variables, so they have to be included unconditionally
+// so that the offload entries are consistent between host and device.
+#if defined(RT_USE_PSEUDO_FILE_UNIT)
+#include <cstdio>
+
+namespace Fortran::runtime::io {
+
+void FlushOutputOnCrash(const Terminator &) {}
+
+ExternalFileUnit *ExternalFileUnit::LookUp(int) {
+ Terminator{__FILE__, __LINE__}.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+
+ExternalFileUnit *ExternalFileUnit::LookUpOrCreate(
+ int, const Terminator &, bool &) {
+ Terminator{__FILE__, __LINE__}.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+
+ExternalFileUnit *ExternalFileUnit::LookUpOrCreateAnonymous(int unit,
+ Direction direction, Fortran::common::optional<bool>,
+ IoErrorHandler &handler) {
+ if (direction != Direction::Output) {
+ handler.Crash("ExternalFileUnit only supports output IO");
+ }
+ return New<ExternalFileUnit>{handler}(unit).release();
+}
+
+ExternalFileUnit *ExternalFileUnit::LookUp(const char *, std::size_t) {
+ Terminator{__FILE__, __LINE__}.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+
+ExternalFileUnit &ExternalFileUnit::CreateNew(int, const Terminator &) {
+ Terminator{__FILE__, __LINE__}.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+
+ExternalFileUnit *ExternalFileUnit::LookUpForClose(int) {
+ Terminator{__FILE__, __LINE__}.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+
+ExternalFileUnit &ExternalFileUnit::NewUnit(const Terminator &, bool) {
+ Terminator{__FILE__, __LINE__}.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+
+bool ExternalFileUnit::OpenUnit(Fortran::common::optional<OpenStatus> status,
+ Fortran::common::optional<Action>, Position, OwningPtr<char> &&,
+ std::size_t, Convert, IoErrorHandler &handler) {
+ handler.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+
+bool ExternalFileUnit::OpenAnonymousUnit(Fortran::common::optional<OpenStatus>,
+ Fortran::common::optional<Action>, Position, Convert convert,
+ IoErrorHandler &handler) {
+ handler.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+
+void ExternalFileUnit::CloseUnit(CloseStatus, IoErrorHandler &handler) {
+ handler.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+
+void ExternalFileUnit::DestroyClosed() {
+ Terminator{__FILE__, __LINE__}.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+
+Iostat ExternalFileUnit::SetDirection(Direction direction) {
+ if (direction != Direction::Output) {
+ return IostatReadFromWriteOnly;
+ }
+ direction_ = direction;
+ return IostatOk;
+}
+
+void ExternalFileUnit::CloseAll(IoErrorHandler &) {}
+
+void ExternalFileUnit::FlushAll(IoErrorHandler &) {}
+
+int ExternalFileUnit::GetAsynchronousId(IoErrorHandler &handler) {
+ handler.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+
+bool ExternalFileUnit::Wait(int) {
+ Terminator{__FILE__, __LINE__}.Crash("unsupported");
+}
+
+void PseudoOpenFile::set_mayAsynchronous(bool yes) {
+ if (yes) {
+ Terminator{__FILE__, __LINE__}.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+ }
+}
+
+Fortran::common::optional<PseudoOpenFile::FileOffset>
+PseudoOpenFile::knownSize() const {
+ Terminator{__FILE__, __LINE__}.Crash("unsupported");
+}
+
+void PseudoOpenFile::Open(OpenStatus, Fortran::common::optional<Action>,
+ Position, IoErrorHandler &handler) {
+ handler.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+
+void PseudoOpenFile::Close(CloseStatus, IoErrorHandler &handler) {
+ handler.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+
+std::size_t PseudoOpenFile::Read(
+ FileOffset, char *, std::size_t, std::size_t, IoErrorHandler &handler) {
+ handler.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+
+std::size_t PseudoOpenFile::Write(FileOffset at, const char *buffer,
+ std::size_t bytes, IoErrorHandler &handler) {
+ if (at) {
+ handler.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+ }
+ // TODO: use persistent string buffer that can be reallocated
+ // as needed, and only freed at destruction of *this.
+ auto string{SizedNew<char>{handler}(bytes + 1)};
+ std::memcpy(string.get(), buffer, bytes);
+ string.get()[bytes] = '\0';
+ std::printf("%s", string.get());
+ return bytes;
+}
+
+void PseudoOpenFile::Truncate(FileOffset, IoErrorHandler &handler) {
+ handler.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+
+int PseudoOpenFile::ReadAsynchronously(
+ FileOffset, char *, std::size_t, IoErrorHandler &handler) {
+ handler.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+
+int PseudoOpenFile::WriteAsynchronously(
+ FileOffset, const char *, std::size_t, IoErrorHandler &handler) {
+ handler.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+
+void PseudoOpenFile::Wait(int, IoErrorHandler &handler) {
+ handler.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+
+void PseudoOpenFile::WaitAll(IoErrorHandler &handler) {
+ handler.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+
+Position PseudoOpenFile::InquirePosition() const {
+ Terminator{__FILE__, __LINE__}.Crash("%s: unsupported", RT_PRETTY_FUNCTION);
+}
+
+} // namespace Fortran::runtime::io
+
+#endif // defined(RT_USE_PSEUDO_FILE_UNIT)
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/ragged.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/ragged.cpp
new file mode 100644
index 00000000000..dddc3ccdfd8
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/ragged.cpp
@@ -0,0 +1,85 @@
+//===-- lib/runtime/ragged.cpp ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang/Runtime/ragged.h"
+#include "flang-rt/runtime/tools.h"
+#include <cstdlib>
+
+namespace Fortran::runtime {
+
+inline RT_API_ATTRS bool isIndirection(const RaggedArrayHeader *const header) {
+ return header->flags & 1;
+}
+
+inline RT_API_ATTRS std::size_t rank(const RaggedArrayHeader *const header) {
+ return header->flags >> 1;
+}
+
+RT_API_ATTRS RaggedArrayHeader *RaggedArrayAllocate(RaggedArrayHeader *header,
+ bool isHeader, std::int64_t rank, std::int64_t elementSize,
+ std::int64_t *extentVector) {
+ if (header && rank) {
+ std::int64_t size{1};
+ for (std::int64_t counter{0}; counter < rank; ++counter) {
+ size *= extentVector[counter];
+ if (size <= 0) {
+ return nullptr;
+ }
+ }
+ header->flags = (rank << 1) | isHeader;
+ header->extentPointer = extentVector;
+ if (isHeader) {
+ elementSize = sizeof(RaggedArrayHeader);
+ }
+ Terminator terminator{__FILE__, __LINE__};
+ std::size_t bytes{static_cast<std::size_t>(elementSize * size)};
+ header->bufferPointer = AllocateMemoryOrCrash(terminator, bytes);
+ if (header->bufferPointer) {
+ std::memset(header->bufferPointer, 0, bytes);
+ }
+ return header;
+ } else {
+ return nullptr;
+ }
+}
+
+// Deallocate a ragged array from the heap.
+RT_API_ATTRS void RaggedArrayDeallocate(RaggedArrayHeader *raggedArrayHeader) {
+ if (raggedArrayHeader) {
+ if (std::size_t end{rank(raggedArrayHeader)}) {
+ if (isIndirection(raggedArrayHeader)) {
+ std::size_t linearExtent{1u};
+ for (std::size_t counter{0u}; counter < end && linearExtent > 0;
+ ++counter) {
+ linearExtent *= raggedArrayHeader->extentPointer[counter];
+ }
+ for (std::size_t counter{0u}; counter < linearExtent; ++counter) {
+ RaggedArrayDeallocate(&static_cast<RaggedArrayHeader *>(
+ raggedArrayHeader->bufferPointer)[counter]);
+ }
+ }
+ std::free(raggedArrayHeader->bufferPointer);
+ std::free(raggedArrayHeader->extentPointer);
+ raggedArrayHeader->flags = 0u;
+ }
+ }
+}
+
+extern "C" {
+void *RTDEF(RaggedArrayAllocate)(void *header, bool isHeader, std::int64_t rank,
+ std::int64_t elementSize, std::int64_t *extentVector) {
+ auto *result = RaggedArrayAllocate(static_cast<RaggedArrayHeader *>(header),
+ isHeader, rank, elementSize, extentVector);
+ return static_cast<void *>(result);
+}
+
+void RTDEF(RaggedArrayDeallocate)(void *raggedArrayHeader) {
+ RaggedArrayDeallocate(static_cast<RaggedArrayHeader *>(raggedArrayHeader));
+}
+} // extern "C"
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/random.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/random.cpp
new file mode 100644
index 00000000000..dc74f2725ed
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/random.cpp
@@ -0,0 +1,228 @@
+//===-- lib/runtime/random.cpp ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Implements the intrinsic subroutines RANDOM_INIT, RANDOM_NUMBER, and
+// RANDOM_SEED.
+
+#include "flang/Runtime/random.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/lock.h"
+#include "flang-rt/runtime/random-templates.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang/Common/float128.h"
+#include "flang/Common/leading-zero-bit-count.h"
+#include "flang/Common/uint128.h"
+#include "flang/Runtime/cpp-type.h"
+#include <cmath>
+#include <cstdint>
+#include <limits>
+#include <memory>
+#include <time.h>
+
+namespace Fortran::runtime::random {
+
+Lock lock;
+Generator generator;
+Fortran::common::optional<GeneratedWord> nextValue;
+
+extern "C" {
+
+void RTNAME(RandomInit)(bool repeatable, bool /*image_distinct*/) {
+ // TODO: multiple images and image_distinct: add image number
+ {
+ CriticalSection critical{lock};
+ if (repeatable) {
+ generator.seed(0);
+ } else {
+#ifdef CLOCK_REALTIME
+ timespec ts;
+ clock_gettime(CLOCK_REALTIME, &ts);
+ generator.seed(ts.tv_sec ^ ts.tv_nsec);
+#else
+ generator.seed(time(nullptr));
+#endif
+ }
+ }
+}
+
+void RTNAME(RandomNumber)(
+ const Descriptor &harvest, const char *source, int line) {
+ Terminator terminator{source, line};
+ auto typeCode{harvest.type().GetCategoryAndKind()};
+ RUNTIME_CHECK(terminator,
+ typeCode &&
+ (typeCode->first == TypeCategory::Real ||
+ typeCode->first == TypeCategory::Unsigned));
+ int kind{typeCode->second};
+ if (typeCode->first == TypeCategory::Real) {
+ switch (kind) {
+ // TODO: REAL (2 & 3)
+ case 4:
+ GenerateReal<CppTypeFor<TypeCategory::Real, 4>, 24>(harvest);
+ return;
+ case 8:
+ GenerateReal<CppTypeFor<TypeCategory::Real, 8>, 53>(harvest);
+ return;
+ case 10:
+ if constexpr (HasCppTypeFor<TypeCategory::Real, 10>) {
+#if HAS_FLOAT80
+ GenerateReal<CppTypeFor<TypeCategory::Real, 10>, 64>(harvest);
+ return;
+#endif
+ }
+ break;
+ }
+ terminator.Crash(
+ "not yet implemented: intrinsic: REAL(KIND=%d) in RANDOM_NUMBER", kind);
+ } else if (typeCode->first == TypeCategory::Unsigned) {
+ switch (kind) {
+ case 1:
+ GenerateUnsigned<CppTypeFor<TypeCategory::Unsigned, 1>>(harvest);
+ return;
+ case 2:
+ GenerateUnsigned<CppTypeFor<TypeCategory::Unsigned, 2>>(harvest);
+ return;
+ case 4:
+ GenerateUnsigned<CppTypeFor<TypeCategory::Unsigned, 4>>(harvest);
+ return;
+ case 8:
+ GenerateUnsigned<CppTypeFor<TypeCategory::Unsigned, 8>>(harvest);
+ return;
+#ifdef __SIZEOF_INT128__
+ case 16:
+ if constexpr (HasCppTypeFor<TypeCategory::Unsigned, 16>) {
+ GenerateUnsigned<CppTypeFor<TypeCategory::Unsigned, 16>>(harvest);
+ return;
+ }
+ break;
+#endif
+ }
+ terminator.Crash(
+ "not yet implemented: intrinsic: UNSIGNED(KIND=%d) in RANDOM_NUMBER",
+ kind);
+ }
+}
+
+void RTNAME(RandomSeedSize)(
+ const Descriptor *size, const char *source, int line) {
+ if (!size || !size->raw().base_addr) {
+ RTNAME(RandomSeedDefaultPut)();
+ return;
+ }
+ Terminator terminator{source, line};
+ auto typeCode{size->type().GetCategoryAndKind()};
+ RUNTIME_CHECK(terminator,
+ size->rank() == 0 && typeCode &&
+ typeCode->first == TypeCategory::Integer);
+ int sizeArg{typeCode->second};
+ switch (sizeArg) {
+ case 4:
+ *size->OffsetElement<CppTypeFor<TypeCategory::Integer, 4>>() = 1;
+ break;
+ case 8:
+ *size->OffsetElement<CppTypeFor<TypeCategory::Integer, 8>>() = 1;
+ break;
+ default:
+ terminator.Crash(
+ "not yet implemented: intrinsic: RANDOM_SEED(SIZE=): size %d\n",
+ sizeArg);
+ }
+}
+
+void RTNAME(RandomSeedPut)(
+ const Descriptor *put, const char *source, int line) {
+ if (!put || !put->raw().base_addr) {
+ RTNAME(RandomSeedDefaultPut)();
+ return;
+ }
+ Terminator terminator{source, line};
+ auto typeCode{put->type().GetCategoryAndKind()};
+ RUNTIME_CHECK(terminator,
+ put->rank() == 1 && typeCode &&
+ typeCode->first == TypeCategory::Integer &&
+ put->GetDimension(0).Extent() >= 1);
+ int putArg{typeCode->second};
+ GeneratedWord seed;
+ switch (putArg) {
+ case 4:
+ seed = *put->OffsetElement<CppTypeFor<TypeCategory::Integer, 4>>();
+ break;
+ case 8:
+ seed = *put->OffsetElement<CppTypeFor<TypeCategory::Integer, 8>>();
+ break;
+ default:
+ terminator.Crash(
+ "not yet implemented: intrinsic: RANDOM_SEED(PUT=): put %d\n", putArg);
+ }
+ {
+ CriticalSection critical{lock};
+ generator.seed(seed);
+ nextValue = seed;
+ }
+}
+
+void RTNAME(RandomSeedDefaultPut)() {
+ // TODO: should this be time &/or image dependent?
+ {
+ CriticalSection critical{lock};
+ generator.seed(0);
+ }
+}
+
+void RTNAME(RandomSeedGet)(
+ const Descriptor *get, const char *source, int line) {
+ if (!get || !get->raw().base_addr) {
+ RTNAME(RandomSeedDefaultPut)();
+ return;
+ }
+ Terminator terminator{source, line};
+ auto typeCode{get->type().GetCategoryAndKind()};
+ RUNTIME_CHECK(terminator,
+ get->rank() == 1 && typeCode &&
+ typeCode->first == TypeCategory::Integer &&
+ get->GetDimension(0).Extent() >= 1);
+ int getArg{typeCode->second};
+ GeneratedWord seed;
+ {
+ CriticalSection critical{lock};
+ seed = GetNextValue();
+ nextValue = seed;
+ }
+ switch (getArg) {
+ case 4:
+ *get->OffsetElement<CppTypeFor<TypeCategory::Integer, 4>>() = seed;
+ break;
+ case 8:
+ *get->OffsetElement<CppTypeFor<TypeCategory::Integer, 8>>() = seed;
+ break;
+ default:
+ terminator.Crash(
+ "not yet implemented: intrinsic: RANDOM_SEED(GET=): get %d\n", getArg);
+ }
+}
+
+void RTNAME(RandomSeed)(const Descriptor *size, const Descriptor *put,
+ const Descriptor *get, const char *source, int line) {
+ bool sizePresent = size && size->raw().base_addr;
+ bool putPresent = put && put->raw().base_addr;
+ bool getPresent = get && get->raw().base_addr;
+ if (sizePresent + putPresent + getPresent > 1)
+ Terminator{source, line}.Crash(
+ "RANDOM_SEED must have either 1 or no arguments");
+ if (sizePresent)
+ RTNAME(RandomSeedSize)(size, source, line);
+ else if (putPresent)
+ RTNAME(RandomSeedPut)(put, source, line);
+ else if (getPresent)
+ RTNAME(RandomSeedGet)(get, source, line);
+ else
+ RTNAME(RandomSeedDefaultPut)();
+}
+
+} // extern "C"
+} // namespace Fortran::runtime::random
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/reduce.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/reduce.cpp
new file mode 100644
index 00000000000..3c5e815e32d
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/reduce.cpp
@@ -0,0 +1,1103 @@
+//===-- lib/runtime/reduce.cpp ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// REDUCE() implementation
+
+#include "flang/Runtime/reduce.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/reduction-templates.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+
+namespace Fortran::runtime {
+
+template <typename T, bool isByValue> class ReduceAccumulator {
+public:
+ using Operation = std::conditional_t<isByValue, ValueReductionOperation<T>,
+ ReferenceReductionOperation<T>>;
+ RT_API_ATTRS ReduceAccumulator(const Descriptor &array, Operation operation,
+ const T *identity, Terminator &terminator)
+ : array_{array}, operation_{operation}, identity_{identity},
+ terminator_{terminator} {}
+ RT_API_ATTRS void Reinitialize() { result_.reset(); }
+ template <typename A>
+ RT_API_ATTRS bool AccumulateAt(const SubscriptValue at[]) {
+ const auto *operand{array_.Element<A>(at)};
+ if (result_) {
+ if constexpr (isByValue) {
+ result_ = operation_(*result_, *operand);
+ } else {
+ result_ = operation_(&*result_, operand);
+ }
+ } else {
+ result_ = *operand;
+ }
+ return true;
+ }
+ template <typename A>
+ RT_API_ATTRS void GetResult(A *to, int /*zeroBasedDim*/ = -1) {
+ if (result_) {
+ *to = *result_;
+ } else if (identity_) {
+ *to = *identity_;
+ } else {
+ terminator_.Crash("REDUCE() without IDENTITY= has no result");
+ }
+ }
+
+private:
+ const Descriptor &array_;
+ common::optional<T> result_;
+ Operation operation_;
+ const T *identity_{nullptr};
+ Terminator &terminator_;
+};
+
+template <typename T, typename OP, bool hasLength>
+class BufferedReduceAccumulator {
+public:
+ RT_API_ATTRS BufferedReduceAccumulator(const Descriptor &array, OP operation,
+ const T *identity, Terminator &terminator)
+ : array_{array}, operation_{operation}, identity_{identity},
+ terminator_{terminator} {}
+ RT_API_ATTRS void Reinitialize() { activeTemp_ = -1; }
+ template <typename A>
+ RT_API_ATTRS bool AccumulateAt(const SubscriptValue at[]) {
+ const auto *operand{array_.Element<A>(at)};
+ if (activeTemp_ >= 0) {
+ if constexpr (hasLength) {
+ operation_(&*temp_[1 - activeTemp_], length_, &*temp_[activeTemp_],
+ operand, length_, length_);
+ } else {
+ operation_(&*temp_[1 - activeTemp_], &*temp_[activeTemp_], operand);
+ }
+ activeTemp_ = 1 - activeTemp_;
+ } else {
+ activeTemp_ = 0;
+ std::memcpy(&*temp_[activeTemp_], operand, elementBytes_);
+ }
+ return true;
+ }
+ template <typename A>
+ RT_API_ATTRS void GetResult(A *to, int /*zeroBasedDim*/ = -1) {
+ if (activeTemp_ >= 0) {
+ std::memcpy(to, &*temp_[activeTemp_], elementBytes_);
+ } else if (identity_) {
+ std::memcpy(to, identity_, elementBytes_);
+ } else {
+ terminator_.Crash("REDUCE() without IDENTITY= has no result");
+ }
+ }
+
+private:
+ const Descriptor &array_;
+ OP operation_;
+ const T *identity_{nullptr};
+ Terminator &terminator_;
+ std::size_t elementBytes_{array_.ElementBytes()};
+ OwningPtr<T> temp_[2]{SizedNew<T>{terminator_}(elementBytes_),
+ SizedNew<T>{terminator_}(elementBytes_)};
+ int activeTemp_{-1};
+ std::size_t length_{elementBytes_ / sizeof(T)};
+};
+
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+std::int8_t RTDEF(ReduceInteger1Ref)(const Descriptor &array,
+ ReferenceReductionOperation<std::int8_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int8_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Integer, 1>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<std::int8_t, false>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+std::int8_t RTDEF(ReduceInteger1Value)(const Descriptor &array,
+ ValueReductionOperation<std::int8_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int8_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Integer, 1>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<std::int8_t, true>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+void RTDEF(ReduceInteger1DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::int8_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int8_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<std::int8_t, false>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Integer, 1>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+void RTDEF(ReduceInteger1DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<std::int8_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int8_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<std::int8_t, true>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Integer, 1>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+std::int16_t RTDEF(ReduceInteger2Ref)(const Descriptor &array,
+ ReferenceReductionOperation<std::int16_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int16_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Integer, 2>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<std::int16_t, false>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+std::int16_t RTDEF(ReduceInteger2Value)(const Descriptor &array,
+ ValueReductionOperation<std::int16_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int16_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Integer, 2>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<std::int16_t, true>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+void RTDEF(ReduceInteger2DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::int16_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int16_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<std::int16_t, false>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Integer, 2>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+void RTDEF(ReduceInteger2DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<std::int16_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int16_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<std::int16_t, true>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Integer, 2>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+std::int32_t RTDEF(ReduceInteger4Ref)(const Descriptor &array,
+ ReferenceReductionOperation<std::int32_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int32_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Integer, 4>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<std::int32_t, false>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+std::int32_t RTDEF(ReduceInteger4Value)(const Descriptor &array,
+ ValueReductionOperation<std::int32_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int32_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Integer, 4>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<std::int32_t, true>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+void RTDEF(ReduceInteger4DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::int32_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int32_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<std::int32_t, false>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Integer, 4>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+void RTDEF(ReduceInteger4DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<std::int32_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int32_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<std::int32_t, true>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Integer, 4>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+std::int64_t RTDEF(ReduceInteger8Ref)(const Descriptor &array,
+ ReferenceReductionOperation<std::int64_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int64_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Integer, 8>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<std::int64_t, false>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+std::int64_t RTDEF(ReduceInteger8Value)(const Descriptor &array,
+ ValueReductionOperation<std::int64_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int64_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Integer, 8>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<std::int64_t, true>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+void RTDEF(ReduceInteger8DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::int64_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int64_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<std::int64_t, false>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Integer, 8>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+void RTDEF(ReduceInteger8DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<std::int64_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int64_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<std::int64_t, true>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Integer, 8>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+#ifdef __SIZEOF_INT128__
+common::int128_t RTDEF(ReduceInteger16Ref)(const Descriptor &array,
+ ReferenceReductionOperation<common::int128_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const common::int128_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Integer, 16>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<common::int128_t, false>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+common::int128_t RTDEF(ReduceInteger16Value)(const Descriptor &array,
+ ValueReductionOperation<common::int128_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const common::int128_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Integer, 16>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<common::int128_t, true>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+void RTDEF(ReduceInteger16DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<common::int128_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const common::int128_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<common::int128_t, false>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Integer, 16>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+void RTDEF(ReduceInteger16DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<common::int128_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const common::int128_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<common::int128_t, true>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Integer, 16>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+#endif
+
+std::uint8_t RTDEF(ReduceUnsigned1Ref)(const Descriptor &array,
+ ReferenceReductionOperation<std::uint8_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::uint8_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Unsigned, 1>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<std::uint8_t, false>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+std::uint8_t RTDEF(ReduceUnsigned1Value)(const Descriptor &array,
+ ValueReductionOperation<std::uint8_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::uint8_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Unsigned, 1>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<std::uint8_t, true>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+void RTDEF(ReduceUnsigned1DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::uint8_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::uint8_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<std::uint8_t, false>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Unsigned, 1>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+void RTDEF(ReduceUnsigned1DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<std::uint8_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::uint8_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<std::uint8_t, true>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Unsigned, 1>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+std::uint16_t RTDEF(ReduceUnsigned2Ref)(const Descriptor &array,
+ ReferenceReductionOperation<std::uint16_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::uint16_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Unsigned, 2>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<std::uint16_t, false>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+std::uint16_t RTDEF(ReduceUnsigned2Value)(const Descriptor &array,
+ ValueReductionOperation<std::uint16_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::uint16_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Unsigned, 2>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<std::uint16_t, true>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+void RTDEF(ReduceUnsigned2DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::uint16_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::uint16_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<std::uint16_t, false>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Unsigned, 2>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+void RTDEF(ReduceUnsigned2DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<std::uint16_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::uint16_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<std::uint16_t, true>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Unsigned, 2>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+std::uint32_t RTDEF(ReduceUnsigned4Ref)(const Descriptor &array,
+ ReferenceReductionOperation<std::uint32_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::uint32_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Unsigned, 4>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<std::uint32_t, false>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+std::uint32_t RTDEF(ReduceUnsigned4Value)(const Descriptor &array,
+ ValueReductionOperation<std::uint32_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::uint32_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Unsigned, 4>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<std::uint32_t, true>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+void RTDEF(ReduceUnsigned4DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::uint32_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::uint32_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<std::uint32_t, false>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Unsigned, 4>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+void RTDEF(ReduceUnsigned4DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<std::uint32_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::uint32_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<std::uint32_t, true>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Unsigned, 4>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+std::uint64_t RTDEF(ReduceUnsigned8Ref)(const Descriptor &array,
+ ReferenceReductionOperation<std::uint64_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::uint64_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Unsigned, 8>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<std::uint64_t, false>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+std::uint64_t RTDEF(ReduceUnsigned8Value)(const Descriptor &array,
+ ValueReductionOperation<std::uint64_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::uint64_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Unsigned, 8>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<std::uint64_t, true>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+void RTDEF(ReduceUnsigned8DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::uint64_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::uint64_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<std::uint64_t, false>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Unsigned, 8>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+void RTDEF(ReduceUnsigned8DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<std::uint64_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::uint64_t *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<std::uint64_t, true>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Unsigned, 8>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+#ifdef __SIZEOF_INT128__
+common::uint128_t RTDEF(ReduceUnsigned16Ref)(const Descriptor &array,
+ ReferenceReductionOperation<common::uint128_t> operation,
+ const char *source, int line, int dim, const Descriptor *mask,
+ const common::uint128_t *identity, bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Unsigned, 16>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<common::uint128_t, false>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+common::uint128_t RTDEF(ReduceUnsigned16Value)(const Descriptor &array,
+ ValueReductionOperation<common::uint128_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask,
+ const common::uint128_t *identity, bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Unsigned, 16>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<common::uint128_t, true>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+void RTDEF(ReduceUnsigned16DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<common::uint128_t> operation,
+ const char *source, int line, int dim, const Descriptor *mask,
+ const common::uint128_t *identity, bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<common::uint128_t, false>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Unsigned, 16>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+void RTDEF(ReduceUnsigned16DimValue)(Descriptor &result,
+ const Descriptor &array,
+ ValueReductionOperation<common::uint128_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask,
+ const common::uint128_t *identity, bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<common::uint128_t, true>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Unsigned, 16>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+#endif
+
+// TODO: real/complex(2 & 3)
+float RTDEF(ReduceReal4Ref)(const Descriptor &array,
+ ReferenceReductionOperation<float> operation, const char *source, int line,
+ int dim, const Descriptor *mask, const float *identity, bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Real, 4>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<float, false>{array, operation, identity, terminator},
+ "REDUCE");
+}
+float RTDEF(ReduceReal4Value)(const Descriptor &array,
+ ValueReductionOperation<float> operation, const char *source, int line,
+ int dim, const Descriptor *mask, const float *identity, bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Real, 4>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<float, true>{array, operation, identity, terminator},
+ "REDUCE");
+}
+void RTDEF(ReduceReal4DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<float> operation, const char *source, int line,
+ int dim, const Descriptor *mask, const float *identity, bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<float, false>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Real, 4>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+void RTDEF(ReduceReal4DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<float> operation, const char *source, int line,
+ int dim, const Descriptor *mask, const float *identity, bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<float, true>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Real, 4>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+double RTDEF(ReduceReal8Ref)(const Descriptor &array,
+ ReferenceReductionOperation<double> operation, const char *source, int line,
+ int dim, const Descriptor *mask, const double *identity, bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Real, 8>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<double, false>{array, operation, identity, terminator},
+ "REDUCE");
+}
+double RTDEF(ReduceReal8Value)(const Descriptor &array,
+ ValueReductionOperation<double> operation, const char *source, int line,
+ int dim, const Descriptor *mask, const double *identity, bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Real, 8>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<double, true>{array, operation, identity, terminator},
+ "REDUCE");
+}
+void RTDEF(ReduceReal8DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<double> operation, const char *source, int line,
+ int dim, const Descriptor *mask, const double *identity, bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<double, false>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Real, 8>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+void RTDEF(ReduceReal8DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<double> operation, const char *source, int line,
+ int dim, const Descriptor *mask, const double *identity, bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<double, true>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Real, 8>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDEF(ReduceReal10Ref)(
+ const Descriptor &array,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Real, 10>> operation,
+ const char *source, int line, int dim, const Descriptor *mask,
+ const CppTypeFor<TypeCategory::Real, 10> *identity, bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Real, 10>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<CppTypeFor<TypeCategory::Real, 10>, false>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+CppTypeFor<TypeCategory::Real, 10> RTDEF(ReduceReal10Value)(
+ const Descriptor &array,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Real, 10>> operation,
+ const char *source, int line, int dim, const Descriptor *mask,
+ const CppTypeFor<TypeCategory::Real, 10> *identity, bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Real, 10>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<CppTypeFor<TypeCategory::Real, 10>, true>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+void RTDEF(ReduceReal10DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Real, 10>> operation,
+ const char *source, int line, int dim, const Descriptor *mask,
+ const CppTypeFor<TypeCategory::Real, 10> *identity, bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator =
+ ReduceAccumulator<CppTypeFor<TypeCategory::Real, 10>, false>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Real, 10>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+void RTDEF(ReduceReal10DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Real, 10>> operation,
+ const char *source, int line, int dim, const Descriptor *mask,
+ const CppTypeFor<TypeCategory::Real, 10> *identity, bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator =
+ ReduceAccumulator<CppTypeFor<TypeCategory::Real, 10>, true>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Real, 10>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppFloat128Type RTDEF(ReduceReal16Ref)(const Descriptor &array,
+ ReferenceReductionOperation<CppFloat128Type> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const CppFloat128Type *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Real, 16>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<CppFloat128Type, false>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+CppFloat128Type RTDEF(ReduceReal16Value)(const Descriptor &array,
+ ValueReductionOperation<CppFloat128Type> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const CppFloat128Type *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ return GetTotalReduction<TypeCategory::Real, 16>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<CppFloat128Type, true>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+void RTDEF(ReduceReal16DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<CppFloat128Type> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const CppFloat128Type *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<CppFloat128Type, false>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Real, 16>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+void RTDEF(ReduceReal16DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<CppFloat128Type> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const CppFloat128Type *identity,
+ bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = ReduceAccumulator<CppFloat128Type, true>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Real, 16>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+#endif
+
+void RTDEF(CppReduceComplex4Ref)(CppTypeFor<TypeCategory::Complex, 4> &result,
+ const Descriptor &array,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Complex, 4>> operation,
+ const char *source, int line, int dim, const Descriptor *mask,
+ const CppTypeFor<TypeCategory::Complex, 4> *identity, bool ordered) {
+ Terminator terminator{source, line};
+ result = GetTotalReduction<TypeCategory::Complex, 4>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<CppTypeFor<TypeCategory::Complex, 4>, false>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+void RTDEF(CppReduceComplex4Value)(CppTypeFor<TypeCategory::Complex, 4> &result,
+ const Descriptor &array,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Complex, 4>> operation,
+ const char *source, int line, int dim, const Descriptor *mask,
+ const CppTypeFor<TypeCategory::Complex, 4> *identity, bool ordered) {
+ Terminator terminator{source, line};
+ result = GetTotalReduction<TypeCategory::Complex, 4>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<CppTypeFor<TypeCategory::Complex, 4>, true>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+void RTDEF(CppReduceComplex4DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Complex, 4>> operation,
+ const char *source, int line, int dim, const Descriptor *mask,
+ const CppTypeFor<TypeCategory::Complex, 4> *identity, bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator =
+ ReduceAccumulator<CppTypeFor<TypeCategory::Complex, 4>, false>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Complex, 4>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+void RTDEF(CppReduceComplex4DimValue)(Descriptor &result,
+ const Descriptor &array,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Complex, 4>> operation,
+ const char *source, int line, int dim, const Descriptor *mask,
+ const CppTypeFor<TypeCategory::Complex, 4> *identity, bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator =
+ ReduceAccumulator<CppTypeFor<TypeCategory::Complex, 4>, true>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Complex, 4>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+void RTDEF(CppReduceComplex8Ref)(CppTypeFor<TypeCategory::Complex, 8> &result,
+ const Descriptor &array,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Complex, 8>> operation,
+ const char *source, int line, int dim, const Descriptor *mask,
+ const CppTypeFor<TypeCategory::Complex, 8> *identity, bool ordered) {
+ Terminator terminator{source, line};
+ result = GetTotalReduction<TypeCategory::Complex, 8>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<CppTypeFor<TypeCategory::Complex, 8>, false>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+void RTDEF(CppReduceComplex8Value)(CppTypeFor<TypeCategory::Complex, 8> &result,
+ const Descriptor &array,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Complex, 8>> operation,
+ const char *source, int line, int dim, const Descriptor *mask,
+ const CppTypeFor<TypeCategory::Complex, 8> *identity, bool ordered) {
+ Terminator terminator{source, line};
+ result = GetTotalReduction<TypeCategory::Complex, 8>(array, source, line, dim,
+ mask,
+ ReduceAccumulator<CppTypeFor<TypeCategory::Complex, 8>, true>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+void RTDEF(CppReduceComplex8DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Complex, 8>> operation,
+ const char *source, int line, int dim, const Descriptor *mask,
+ const CppTypeFor<TypeCategory::Complex, 8> *identity, bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator =
+ ReduceAccumulator<CppTypeFor<TypeCategory::Complex, 8>, false>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Complex, 8>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+void RTDEF(CppReduceComplex8DimValue)(Descriptor &result,
+ const Descriptor &array,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Complex, 8>> operation,
+ const char *source, int line, int dim, const Descriptor *mask,
+ const CppTypeFor<TypeCategory::Complex, 8> *identity, bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator =
+ ReduceAccumulator<CppTypeFor<TypeCategory::Complex, 8>, true>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Complex, 8>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+#if HAS_FLOAT80
+void RTDEF(CppReduceComplex10Ref)(CppTypeFor<TypeCategory::Complex, 10> &result,
+ const Descriptor &array,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Complex, 10>>
+ operation,
+ const char *source, int line, int dim, const Descriptor *mask,
+ const CppTypeFor<TypeCategory::Complex, 10> *identity, bool ordered) {
+ Terminator terminator{source, line};
+ result = GetTotalReduction<TypeCategory::Complex, 10>(array, source, line,
+ dim, mask,
+ ReduceAccumulator<CppTypeFor<TypeCategory::Complex, 10>, false>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+void RTDEF(CppReduceComplex10Value)(
+ CppTypeFor<TypeCategory::Complex, 10> &result, const Descriptor &array,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Complex, 10>> operation,
+ const char *source, int line, int dim, const Descriptor *mask,
+ const CppTypeFor<TypeCategory::Complex, 10> *identity, bool ordered) {
+ Terminator terminator{source, line};
+ result = GetTotalReduction<TypeCategory::Complex, 10>(array, source, line,
+ dim, mask,
+ ReduceAccumulator<CppTypeFor<TypeCategory::Complex, 10>, true>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+void RTDEF(CppReduceComplex10DimRef)(Descriptor &result,
+ const Descriptor &array,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Complex, 10>>
+ operation,
+ const char *source, int line, int dim, const Descriptor *mask,
+ const CppTypeFor<TypeCategory::Complex, 10> *identity, bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator =
+ ReduceAccumulator<CppTypeFor<TypeCategory::Complex, 10>, false>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Complex, 10>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+void RTDEF(CppReduceComplex10DimValue)(Descriptor &result,
+ const Descriptor &array,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Complex, 10>> operation,
+ const char *source, int line, int dim, const Descriptor *mask,
+ const CppTypeFor<TypeCategory::Complex, 10> *identity, bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator =
+ ReduceAccumulator<CppTypeFor<TypeCategory::Complex, 10>, true>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Complex, 10>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+void RTDEF(CppReduceComplex16Ref)(CppTypeFor<TypeCategory::Complex, 16> &result,
+ const Descriptor &array,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Complex, 16>>
+ operation,
+ const char *source, int line, int dim, const Descriptor *mask,
+ const CppTypeFor<TypeCategory::Complex, 16> *identity, bool ordered) {
+ Terminator terminator{source, line};
+ result = GetTotalReduction<TypeCategory::Complex, 16>(array, source, line,
+ dim, mask,
+ ReduceAccumulator<CppTypeFor<TypeCategory::Complex, 16>, false>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+void RTDEF(CppReduceComplex16Value)(
+ CppTypeFor<TypeCategory::Complex, 16> &result, const Descriptor &array,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Complex, 16>> operation,
+ const char *source, int line, int dim, const Descriptor *mask,
+ const CppTypeFor<TypeCategory::Complex, 16> *identity, bool ordered) {
+ Terminator terminator{source, line};
+ result = GetTotalReduction<TypeCategory::Complex, 16>(array, source, line,
+ dim, mask,
+ ReduceAccumulator<CppTypeFor<TypeCategory::Complex, 16>, true>{
+ array, operation, identity, terminator},
+ "REDUCE");
+}
+void RTDEF(CppReduceComplex16DimRef)(Descriptor &result,
+ const Descriptor &array,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Complex, 16>>
+ operation,
+ const char *source, int line, int dim, const Descriptor *mask,
+ const CppTypeFor<TypeCategory::Complex, 16> *identity, bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator =
+ ReduceAccumulator<CppTypeFor<TypeCategory::Complex, 16>, false>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Complex, 16>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+void RTDEF(CppReduceComplex16DimValue)(Descriptor &result,
+ const Descriptor &array,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Complex, 16>> operation,
+ const char *source, int line, int dim, const Descriptor *mask,
+ const CppTypeFor<TypeCategory::Complex, 16> *identity, bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator =
+ ReduceAccumulator<CppTypeFor<TypeCategory::Complex, 16>, true>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Complex, 16>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+#endif
+
+bool RTDEF(ReduceLogical1Ref)(const Descriptor &array,
+ ReferenceReductionOperation<std::int8_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int8_t *identity,
+ bool ordered) {
+ return RTNAME(ReduceInteger1Ref)(
+ array, operation, source, line, dim, mask, identity, ordered) != 0;
+}
+bool RTDEF(ReduceLogical1Value)(const Descriptor &array,
+ ValueReductionOperation<std::int8_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int8_t *identity,
+ bool ordered) {
+ return RTNAME(ReduceInteger1Value)(
+ array, operation, source, line, dim, mask, identity, ordered) != 0;
+}
+void RTDEF(ReduceLogical1DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::int8_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int8_t *identity,
+ bool ordered) {
+ RTNAME(ReduceInteger1DimRef)
+ (result, array, operation, source, line, dim, mask, identity, ordered);
+}
+void RTDEF(ReduceLogical1DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<std::int8_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int8_t *identity,
+ bool ordered) {
+ RTNAME(ReduceInteger1DimValue)
+ (result, array, operation, source, line, dim, mask, identity, ordered);
+}
+bool RTDEF(ReduceLogical2Ref)(const Descriptor &array,
+ ReferenceReductionOperation<std::int16_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int16_t *identity,
+ bool ordered) {
+ return RTNAME(ReduceInteger2Ref)(
+ array, operation, source, line, dim, mask, identity, ordered) != 0;
+}
+bool RTDEF(ReduceLogical2Value)(const Descriptor &array,
+ ValueReductionOperation<std::int16_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int16_t *identity,
+ bool ordered) {
+ return RTNAME(ReduceInteger2Value)(
+ array, operation, source, line, dim, mask, identity, ordered) != 0;
+}
+void RTDEF(ReduceLogical2DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::int16_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int16_t *identity,
+ bool ordered) {
+ RTNAME(ReduceInteger2DimRef)
+ (result, array, operation, source, line, dim, mask, identity, ordered);
+}
+void RTDEF(ReduceLogical2DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<std::int16_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int16_t *identity,
+ bool ordered) {
+ RTNAME(ReduceInteger2DimValue)
+ (result, array, operation, source, line, dim, mask, identity, ordered);
+}
+bool RTDEF(ReduceLogical4Ref)(const Descriptor &array,
+ ReferenceReductionOperation<std::int32_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int32_t *identity,
+ bool ordered) {
+ return RTNAME(ReduceInteger4Ref)(
+ array, operation, source, line, dim, mask, identity, ordered) != 0;
+}
+bool RTDEF(ReduceLogical4Value)(const Descriptor &array,
+ ValueReductionOperation<std::int32_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int32_t *identity,
+ bool ordered) {
+ return RTNAME(ReduceInteger4Value)(
+ array, operation, source, line, dim, mask, identity, ordered) != 0;
+}
+void RTDEF(ReduceLogical4DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::int32_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int32_t *identity,
+ bool ordered) {
+ RTNAME(ReduceInteger4DimRef)
+ (result, array, operation, source, line, dim, mask, identity, ordered);
+}
+void RTDEF(ReduceLogical4DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<std::int32_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int32_t *identity,
+ bool ordered) {
+ RTNAME(ReduceInteger4DimValue)
+ (result, array, operation, source, line, dim, mask, identity, ordered);
+}
+bool RTDEF(ReduceLogical8Ref)(const Descriptor &array,
+ ReferenceReductionOperation<std::int64_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int64_t *identity,
+ bool ordered) {
+ return RTNAME(ReduceInteger8Ref)(
+ array, operation, source, line, dim, mask, identity, ordered) != 0;
+}
+bool RTDEF(ReduceLogical8Value)(const Descriptor &array,
+ ValueReductionOperation<std::int64_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int64_t *identity,
+ bool ordered) {
+ return RTNAME(ReduceInteger8Value)(
+ array, operation, source, line, dim, mask, identity, ordered) != 0;
+}
+void RTDEF(ReduceLogical8DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::int64_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int64_t *identity,
+ bool ordered) {
+ RTNAME(ReduceInteger8DimRef)
+ (result, array, operation, source, line, dim, mask, identity, ordered);
+}
+void RTDEF(ReduceLogical8DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<std::int64_t> operation, const char *source,
+ int line, int dim, const Descriptor *mask, const std::int64_t *identity,
+ bool ordered) {
+ RTNAME(ReduceInteger8DimValue)
+ (result, array, operation, source, line, dim, mask, identity, ordered);
+}
+
+void RTDEF(ReduceChar1)(char *result, const Descriptor &array,
+ ReductionCharOperation<char> operation, const char *source, int line,
+ int dim, const Descriptor *mask, const char *identity, bool ordered) {
+ Terminator terminator{source, line};
+ BufferedReduceAccumulator<char, ReductionCharOperation<char>,
+ /*hasLength=*/true>
+ accumulator{array, operation, identity, terminator};
+ DoTotalReduction<char>(array, dim, mask, accumulator, "REDUCE", terminator);
+ accumulator.GetResult(result);
+}
+void RTDEF(ReduceCharacter1Dim)(Descriptor &result, const Descriptor &array,
+ ReductionCharOperation<char> operation, const char *source, int line,
+ int dim, const Descriptor *mask, const char *identity, bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = BufferedReduceAccumulator<char,
+ ReductionCharOperation<char>, /*hasLength=*/true>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Character, 1>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+void RTDEF(ReduceChar2)(char16_t *result, const Descriptor &array,
+ ReductionCharOperation<char16_t> operation, const char *source, int line,
+ int dim, const Descriptor *mask, const char16_t *identity, bool ordered) {
+ Terminator terminator{source, line};
+ BufferedReduceAccumulator<char16_t, ReductionCharOperation<char16_t>,
+ /*hasLength=*/true>
+ accumulator{array, operation, identity, terminator};
+ DoTotalReduction<char16_t>(
+ array, dim, mask, accumulator, "REDUCE", terminator);
+ accumulator.GetResult(result);
+}
+void RTDEF(ReduceCharacter2Dim)(Descriptor &result, const Descriptor &array,
+ ReductionCharOperation<char16_t> operation, const char *source, int line,
+ int dim, const Descriptor *mask, const char16_t *identity, bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = BufferedReduceAccumulator<char16_t,
+ ReductionCharOperation<char16_t>, /*hasLength=*/true>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Character, 2>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+void RTDEF(ReduceChar4)(char32_t *result, const Descriptor &array,
+ ReductionCharOperation<char32_t> operation, const char *source, int line,
+ int dim, const Descriptor *mask, const char32_t *identity, bool ordered) {
+ Terminator terminator{source, line};
+ BufferedReduceAccumulator<char32_t, ReductionCharOperation<char32_t>,
+ /*hasLength=*/true>
+ accumulator{array, operation, identity, terminator};
+ DoTotalReduction<char32_t>(
+ array, dim, mask, accumulator, "REDUCE", terminator);
+ accumulator.GetResult(result);
+}
+void RTDEF(ReduceCharacter4Dim)(Descriptor &result, const Descriptor &array,
+ ReductionCharOperation<char32_t> operation, const char *source, int line,
+ int dim, const Descriptor *mask, const char32_t *identity, bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = BufferedReduceAccumulator<char32_t,
+ ReductionCharOperation<char32_t>, /*hasLength=*/true>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Character, 4>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+
+void RTDEF(ReduceDerivedType)(char *result, const Descriptor &array,
+ ReductionDerivedTypeOperation operation, const char *source, int line,
+ int dim, const Descriptor *mask, const char *identity, bool ordered) {
+ Terminator terminator{source, line};
+ BufferedReduceAccumulator<char, ReductionDerivedTypeOperation,
+ /*hasLength=*/false>
+ accumulator{array, operation, identity, terminator};
+ DoTotalReduction<char>(array, dim, mask, accumulator, "REDUCE", terminator);
+ accumulator.GetResult(result);
+}
+void RTDEF(ReduceDerivedTypeDim)(Descriptor &result, const Descriptor &array,
+ ReductionDerivedTypeOperation operation, const char *source, int line,
+ int dim, const Descriptor *mask, const char *identity, bool ordered) {
+ Terminator terminator{source, line};
+ using Accumulator = BufferedReduceAccumulator<char,
+ ReductionDerivedTypeOperation, /*hasLength=*/false>;
+ Accumulator accumulator{array, operation, identity, terminator};
+ PartialReduction<Accumulator, TypeCategory::Derived, 0>(result, array,
+ array.ElementBytes(), dim, mask, terminator, "REDUCE", accumulator);
+}
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/reduction.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/reduction.cpp
new file mode 100644
index 00000000000..6bb47a02ab6
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/reduction.cpp
@@ -0,0 +1,409 @@
+//===-- lib/runtime/reduction.cpp -------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Implements ALL, ANY, COUNT, IALL, IANY, IPARITY, & PARITY for all required
+// operand types and shapes.
+//
+// DOT_PRODUCT, FINDLOC, MATMUL, SUM, and PRODUCT are in their own eponymous
+// source files.
+// NORM2, MAXLOC, MINLOC, MAXVAL, and MINVAL are in extrema.cpp.
+
+#include "flang/Runtime/reduction.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/reduction-templates.h"
+#include <cinttypes>
+
+namespace Fortran::runtime {
+
+// IALL, IANY, IPARITY
+
+template <typename INTERMEDIATE> class IntegerAndAccumulator {
+public:
+ explicit RT_API_ATTRS IntegerAndAccumulator(const Descriptor &array)
+ : array_{array} {}
+ RT_API_ATTRS void Reinitialize() { and_ = ~INTERMEDIATE{0}; }
+ template <typename A>
+ RT_API_ATTRS void GetResult(A *p, int /*zeroBasedDim*/ = -1) const {
+ *p = static_cast<A>(and_);
+ }
+ template <typename A>
+ RT_API_ATTRS bool AccumulateAt(const SubscriptValue at[]) {
+ and_ &= *array_.Element<A>(at);
+ return true;
+ }
+
+private:
+ const Descriptor &array_;
+ INTERMEDIATE and_{~INTERMEDIATE{0}};
+};
+
+template <typename INTERMEDIATE> class IntegerOrAccumulator {
+public:
+ explicit RT_API_ATTRS IntegerOrAccumulator(const Descriptor &array)
+ : array_{array} {}
+ RT_API_ATTRS void Reinitialize() { or_ = 0; }
+ template <typename A>
+ RT_API_ATTRS void GetResult(A *p, int /*zeroBasedDim*/ = -1) const {
+ *p = static_cast<A>(or_);
+ }
+ template <typename A>
+ RT_API_ATTRS bool AccumulateAt(const SubscriptValue at[]) {
+ or_ |= *array_.Element<A>(at);
+ return true;
+ }
+
+private:
+ const Descriptor &array_;
+ INTERMEDIATE or_{0};
+};
+
+template <typename INTERMEDIATE> class IntegerXorAccumulator {
+public:
+ explicit RT_API_ATTRS IntegerXorAccumulator(const Descriptor &array)
+ : array_{array} {}
+ RT_API_ATTRS void Reinitialize() { xor_ = 0; }
+ template <typename A>
+ RT_API_ATTRS void GetResult(A *p, int /*zeroBasedDim*/ = -1) const {
+ *p = static_cast<A>(xor_);
+ }
+ template <typename A>
+ RT_API_ATTRS bool AccumulateAt(const SubscriptValue at[]) {
+ xor_ ^= *array_.Element<A>(at);
+ return true;
+ }
+
+private:
+ const Descriptor &array_;
+ INTERMEDIATE xor_{0};
+};
+
+extern "C" {
+CppTypeFor<TypeCategory::Integer, 1> RTDEF(IAll1)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 1>(x, source, line, dim, mask,
+ IntegerAndAccumulator<CppTypeFor<TypeCategory::Integer, 4>>{x}, "IALL",
+ /*allowUnsignedForInteger=*/true);
+}
+CppTypeFor<TypeCategory::Integer, 2> RTDEF(IAll2)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 2>(x, source, line, dim, mask,
+ IntegerAndAccumulator<CppTypeFor<TypeCategory::Integer, 4>>{x}, "IALL",
+ /*allowUnsignedForInteger=*/true);
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(IAll4)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 4>(x, source, line, dim, mask,
+ IntegerAndAccumulator<CppTypeFor<TypeCategory::Integer, 4>>{x}, "IALL",
+ /*allowUnsignedForInteger=*/true);
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(IAll8)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 8>(x, source, line, dim, mask,
+ IntegerAndAccumulator<CppTypeFor<TypeCategory::Integer, 8>>{x}, "IALL",
+ /*allowUnsignedForInteger=*/true);
+}
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDEF(IAll16)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 16>(x, source, line, dim,
+ mask, IntegerAndAccumulator<CppTypeFor<TypeCategory::Integer, 16>>{x},
+ "IALL", /*allowUnsignedForInteger=*/true);
+}
+#endif
+void RTDEF(IAllDim)(Descriptor &result, const Descriptor &x, int dim,
+ const char *source, int line, const Descriptor *mask) {
+ Terminator terminator{source, line};
+ auto catKind{x.type().GetCategoryAndKind()};
+ RUNTIME_CHECK(terminator,
+ catKind.has_value() &&
+ (catKind->first == TypeCategory::Integer ||
+ catKind->first == TypeCategory::Unsigned));
+ PartialIntegerReduction<IntegerAndAccumulator>(
+ result, x, dim, catKind->second, mask, "IALL", terminator);
+}
+
+CppTypeFor<TypeCategory::Integer, 1> RTDEF(IAny1)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 1>(x, source, line, dim, mask,
+ IntegerOrAccumulator<CppTypeFor<TypeCategory::Integer, 4>>{x}, "IANY",
+ /*allowUnsignedForInteger=*/true);
+}
+CppTypeFor<TypeCategory::Integer, 2> RTDEF(IAny2)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 2>(x, source, line, dim, mask,
+ IntegerOrAccumulator<CppTypeFor<TypeCategory::Integer, 4>>{x}, "IANY",
+ /*allowUnsignedForInteger=*/true);
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(IAny4)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 4>(x, source, line, dim, mask,
+ IntegerOrAccumulator<CppTypeFor<TypeCategory::Integer, 4>>{x}, "IANY",
+ /*allowUnsignedForInteger=*/true);
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(IAny8)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 8>(x, source, line, dim, mask,
+ IntegerOrAccumulator<CppTypeFor<TypeCategory::Integer, 8>>{x}, "IANY",
+ /*allowUnsignedForInteger=*/true);
+}
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDEF(IAny16)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 16>(x, source, line, dim,
+ mask, IntegerOrAccumulator<CppTypeFor<TypeCategory::Integer, 16>>{x},
+ "IANY", /*allowUnsignedForInteger=*/true);
+}
+#endif
+void RTDEF(IAnyDim)(Descriptor &result, const Descriptor &x, int dim,
+ const char *source, int line, const Descriptor *mask) {
+ Terminator terminator{source, line};
+ auto catKind{x.type().GetCategoryAndKind()};
+ RUNTIME_CHECK(terminator,
+ catKind.has_value() &&
+ (catKind->first == TypeCategory::Integer ||
+ catKind->first == TypeCategory::Unsigned));
+ PartialIntegerReduction<IntegerOrAccumulator>(
+ result, x, dim, catKind->second, mask, "IANY", terminator);
+}
+
+CppTypeFor<TypeCategory::Integer, 1> RTDEF(IParity1)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 1>(x, source, line, dim, mask,
+ IntegerXorAccumulator<CppTypeFor<TypeCategory::Integer, 4>>{x}, "IPARITY",
+ /*allowUnsignedForInteger=*/true);
+}
+CppTypeFor<TypeCategory::Integer, 2> RTDEF(IParity2)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 2>(x, source, line, dim, mask,
+ IntegerXorAccumulator<CppTypeFor<TypeCategory::Integer, 4>>{x}, "IPARITY",
+ /*allowUnsignedForInteger=*/true);
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(IParity4)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 4>(x, source, line, dim, mask,
+ IntegerXorAccumulator<CppTypeFor<TypeCategory::Integer, 4>>{x}, "IPARITY",
+ /*allowUnsignedForInteger=*/true);
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(IParity8)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 8>(x, source, line, dim, mask,
+ IntegerXorAccumulator<CppTypeFor<TypeCategory::Integer, 8>>{x}, "IPARITY",
+ /*allowUnsignedForInteger=*/true);
+}
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDEF(IParity16)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 16>(x, source, line, dim,
+ mask, IntegerXorAccumulator<CppTypeFor<TypeCategory::Integer, 16>>{x},
+ "IPARITY", /*allowUnsignedForInteger=*/true);
+}
+#endif
+void RTDEF(IParityDim)(Descriptor &result, const Descriptor &x, int dim,
+ const char *source, int line, const Descriptor *mask) {
+ Terminator terminator{source, line};
+ auto catKind{x.type().GetCategoryAndKind()};
+ RUNTIME_CHECK(terminator,
+ catKind.has_value() &&
+ (catKind->first == TypeCategory::Integer ||
+ catKind->first == TypeCategory::Unsigned));
+ PartialIntegerReduction<IntegerXorAccumulator>(
+ result, x, dim, catKind->second, mask, "IPARITY", terminator);
+}
+}
+
+// ALL, ANY, COUNT, & PARITY
+
+enum class LogicalReduction { All, Any, Parity };
+
+template <LogicalReduction REDUCTION> class LogicalAccumulator {
+public:
+ using Type = bool;
+ RT_API_ATTRS explicit LogicalAccumulator(const Descriptor &array)
+ : array_{array} {}
+ RT_API_ATTRS void Reinitialize() {
+ result_ = REDUCTION == LogicalReduction::All;
+ }
+ RT_API_ATTRS bool Result() const { return result_; }
+ RT_API_ATTRS bool Accumulate(bool x) {
+ if constexpr (REDUCTION == LogicalReduction::Parity) {
+ result_ = result_ != x;
+ } else if (x != (REDUCTION == LogicalReduction::All)) {
+ result_ = x;
+ return false;
+ }
+ return true;
+ }
+ template <typename IGNORED = void>
+ RT_API_ATTRS bool AccumulateAt(const SubscriptValue at[]) {
+ return Accumulate(IsLogicalElementTrue(array_, at));
+ }
+
+private:
+ const Descriptor &array_;
+ bool result_{REDUCTION == LogicalReduction::All};
+};
+
+template <typename ACCUMULATOR>
+RT_API_ATTRS inline auto GetTotalLogicalReduction(const Descriptor &x,
+ const char *source, int line, int dim, ACCUMULATOR &&accumulator,
+ const char *intrinsic) -> typename ACCUMULATOR::Type {
+ Terminator terminator{source, line};
+ if (dim < 0 || dim > 1) {
+ terminator.Crash("%s: bad DIM=%d for ARRAY with rank=1", intrinsic, dim);
+ }
+ SubscriptValue xAt[maxRank];
+ x.GetLowerBounds(xAt);
+ for (auto elements{x.Elements()}; elements--; x.IncrementSubscripts(xAt)) {
+ if (!accumulator.AccumulateAt(xAt)) {
+ break; // cut short, result is known
+ }
+ }
+ return accumulator.Result();
+}
+
+template <typename ACCUMULATOR>
+RT_API_ATTRS inline auto ReduceLogicalDimToScalar(
+ const Descriptor &x, int zeroBasedDim, SubscriptValue subscripts[]) ->
+ typename ACCUMULATOR::Type {
+ ACCUMULATOR accumulator{x};
+ SubscriptValue xAt[maxRank];
+ GetExpandedSubscripts(xAt, x, zeroBasedDim, subscripts);
+ const auto &dim{x.GetDimension(zeroBasedDim)};
+ SubscriptValue at{dim.LowerBound()};
+ for (auto n{dim.Extent()}; n-- > 0; ++at) {
+ xAt[zeroBasedDim] = at;
+ if (!accumulator.AccumulateAt(xAt)) {
+ break;
+ }
+ }
+ return accumulator.Result();
+}
+
+template <LogicalReduction REDUCTION> struct LogicalReduceHelper {
+ template <int KIND> struct Functor {
+ RT_API_ATTRS void operator()(Descriptor &result, const Descriptor &x,
+ int dim, Terminator &terminator, const char *intrinsic) const {
+ // Standard requires result to have same LOGICAL kind as argument.
+ CreatePartialReductionResult(
+ result, x, x.ElementBytes(), dim, terminator, intrinsic, x.type());
+ SubscriptValue at[maxRank];
+ result.GetLowerBounds(at);
+ INTERNAL_CHECK(result.rank() == 0 || at[0] == 1);
+ using CppType = CppTypeFor<TypeCategory::Logical, KIND>;
+ for (auto n{result.Elements()}; n-- > 0; result.IncrementSubscripts(at)) {
+ *result.Element<CppType>(at) =
+ ReduceLogicalDimToScalar<LogicalAccumulator<REDUCTION>>(
+ x, dim - 1, at);
+ }
+ }
+ };
+};
+
+template <LogicalReduction REDUCTION>
+RT_API_ATTRS inline void DoReduceLogicalDimension(Descriptor &result,
+ const Descriptor &x, int dim, Terminator &terminator,
+ const char *intrinsic) {
+ auto catKind{x.type().GetCategoryAndKind()};
+ RUNTIME_CHECK(terminator, catKind && catKind->first == TypeCategory::Logical);
+ ApplyLogicalKind<LogicalReduceHelper<REDUCTION>::template Functor, void>(
+ catKind->second, terminator, result, x, dim, terminator, intrinsic);
+}
+
+// COUNT
+
+class CountAccumulator {
+public:
+ using Type = std::int64_t;
+ RT_API_ATTRS explicit CountAccumulator(const Descriptor &array)
+ : array_{array} {}
+ RT_API_ATTRS void Reinitialize() { result_ = 0; }
+ RT_API_ATTRS Type Result() const { return result_; }
+ template <typename IGNORED = void>
+ RT_API_ATTRS bool AccumulateAt(const SubscriptValue at[]) {
+ if (IsLogicalElementTrue(array_, at)) {
+ ++result_;
+ }
+ return true;
+ }
+
+private:
+ const Descriptor &array_;
+ Type result_{0};
+};
+
+template <int KIND> struct CountDimension {
+ RT_API_ATTRS void operator()(Descriptor &result, const Descriptor &x, int dim,
+ Terminator &terminator) const {
+ // Element size of the descriptor descriptor is the size
+ // of {TypeCategory::Integer, KIND}.
+ CreatePartialReductionResult(result, x,
+ Descriptor::BytesFor(TypeCategory::Integer, KIND), dim, terminator,
+ "COUNT", TypeCode{TypeCategory::Integer, KIND});
+ SubscriptValue at[maxRank];
+ result.GetLowerBounds(at);
+ INTERNAL_CHECK(result.rank() == 0 || at[0] == 1);
+ using CppType = CppTypeFor<TypeCategory::Integer, KIND>;
+ for (auto n{result.Elements()}; n-- > 0; result.IncrementSubscripts(at)) {
+ *result.Element<CppType>(at) =
+ ReduceLogicalDimToScalar<CountAccumulator>(x, dim - 1, at);
+ }
+ }
+};
+
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+bool RTDEF(All)(const Descriptor &x, const char *source, int line, int dim) {
+ return GetTotalLogicalReduction(x, source, line, dim,
+ LogicalAccumulator<LogicalReduction::All>{x}, "ALL");
+}
+void RTDEF(AllDim)(Descriptor &result, const Descriptor &x, int dim,
+ const char *source, int line) {
+ Terminator terminator{source, line};
+ DoReduceLogicalDimension<LogicalReduction::All>(
+ result, x, dim, terminator, "ALL");
+}
+
+bool RTDEF(Any)(const Descriptor &x, const char *source, int line, int dim) {
+ return GetTotalLogicalReduction(x, source, line, dim,
+ LogicalAccumulator<LogicalReduction::Any>{x}, "ANY");
+}
+void RTDEF(AnyDim)(Descriptor &result, const Descriptor &x, int dim,
+ const char *source, int line) {
+ Terminator terminator{source, line};
+ DoReduceLogicalDimension<LogicalReduction::Any>(
+ result, x, dim, terminator, "ANY");
+}
+
+std::int64_t RTDEF(Count)(
+ const Descriptor &x, const char *source, int line, int dim) {
+ return GetTotalLogicalReduction(
+ x, source, line, dim, CountAccumulator{x}, "COUNT");
+}
+
+void RTDEF(CountDim)(Descriptor &result, const Descriptor &x, int dim, int kind,
+ const char *source, int line) {
+ Terminator terminator{source, line};
+ ApplyIntegerKind<CountDimension, void>(
+ kind, terminator, result, x, dim, terminator);
+}
+
+bool RTDEF(Parity)(const Descriptor &x, const char *source, int line, int dim) {
+ return GetTotalLogicalReduction(x, source, line, dim,
+ LogicalAccumulator<LogicalReduction::Parity>{x}, "PARITY");
+}
+void RTDEF(ParityDim)(Descriptor &result, const Descriptor &x, int dim,
+ const char *source, int line) {
+ Terminator terminator{source, line};
+ DoReduceLogicalDimension<LogicalReduction::Parity>(
+ result, x, dim, terminator, "PARITY");
+}
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/stack.h b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/stack.h
new file mode 100644
index 00000000000..38364ff541f
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/stack.h
@@ -0,0 +1,136 @@
+//===-- lib/runtime/stack.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Trivial implementation of stack that can be used on all targets.
+// It is a list based stack with dynamic allocation/deallocation
+// of the list nodes.
+
+#ifndef FLANG_RT_RUNTIME_STACK_H_
+#define FLANG_RT_RUNTIME_STACK_H_
+
+#include "flang-rt/runtime/memory.h"
+#include "flang-rt/runtime/terminator.h"
+
+namespace Fortran::runtime {
+// Storage for the Stack elements of type T.
+template <typename T, unsigned N> struct StackStorage {
+ RT_API_ATTRS void *getElement(unsigned i) {
+ if (i < N) {
+ return storage[i];
+ } else {
+ return nullptr;
+ }
+ }
+ RT_API_ATTRS const void *getElement(unsigned i) const {
+ if (i < N) {
+ return storage[i];
+ } else {
+ return nullptr;
+ }
+ }
+
+private:
+ // Storage to hold N elements of type T.
+ // It is declared as an array of bytes to avoid
+ // default construction (if any is implied by type T).
+ alignas(T) char storage[N][sizeof(T)];
+};
+
+// 0-size specialization that provides no storage.
+template <typename T> struct alignas(T) StackStorage<T, 0> {
+ RT_API_ATTRS void *getElement(unsigned) { return nullptr; }
+ RT_API_ATTRS const void *getElement(unsigned) const { return nullptr; }
+};
+
+template <typename T, unsigned N = 0> class Stack : public StackStorage<T, N> {
+public:
+ Stack() = delete;
+ Stack(const Stack &) = delete;
+ Stack(Stack &&) = delete;
+ RT_API_ATTRS Stack(Terminator &terminator) : terminator_{terminator} {}
+ RT_API_ATTRS ~Stack() {
+ while (!empty()) {
+ pop();
+ }
+ }
+ RT_API_ATTRS void push(const T &object) {
+ if (void *ptr{this->getElement(size_)}) {
+ new (ptr) T{object};
+ } else {
+ top_ = New<List>{terminator_}(top_, object).release();
+ }
+ ++size_;
+ }
+ RT_API_ATTRS void push(T &&object) {
+ if (void *ptr{this->getElement(size_)}) {
+ new (ptr) T{std::move(object)};
+ } else {
+ top_ = New<List>{terminator_}(top_, std::move(object)).release();
+ }
+ ++size_;
+ }
+ template <typename... Args> RT_API_ATTRS void emplace(Args &&...args) {
+ if (void *ptr{this->getElement(size_)}) {
+ new (ptr) T{std::forward<Args>(args)...};
+ } else {
+ top_ =
+ New<List>{terminator_}(top_, std::forward<Args>(args)...).release();
+ }
+ ++size_;
+ }
+ RT_API_ATTRS T &top() {
+ RUNTIME_CHECK(terminator_, size_ > 0);
+ if (void *ptr{this->getElement(size_ - 1)}) {
+ return *reinterpret_cast<T *>(ptr);
+ } else {
+ RUNTIME_CHECK(terminator_, top_);
+ return top_->object_;
+ }
+ }
+ RT_API_ATTRS const T &top() const {
+ RUNTIME_CHECK(terminator_, size_ > 0);
+ if (void *ptr{this->getElement(size_ - 1)}) {
+ return *reinterpret_cast<const T *>(ptr);
+ } else {
+ RUNTIME_CHECK(terminator_, top_);
+ return top_->object_;
+ }
+ }
+ RT_API_ATTRS void pop() {
+ RUNTIME_CHECK(terminator_, size_ > 0);
+ if (void *ptr{this->getElement(size_ - 1)}) {
+ reinterpret_cast<T *>(ptr)->~T();
+ } else {
+ RUNTIME_CHECK(terminator_, top_);
+ List *next{top_->next_};
+ top_->~List();
+ FreeMemory(top_);
+ top_ = next;
+ }
+ --size_;
+ }
+ RT_API_ATTRS bool empty() const { return size_ == 0; }
+
+private:
+ struct List {
+ template <typename... Args>
+ RT_API_ATTRS List(List *next, Args &&...args)
+ : next_(next), object_(std::forward<Args>(args)...) {}
+ RT_API_ATTRS List(List *next, const T &object)
+ : next_(next), object_(object) {}
+ RT_API_ATTRS List(List *next, T &&object)
+ : next_(next), object_(std::move(object)) {}
+ List *next_{nullptr};
+ T object_;
+ };
+ List *top_{nullptr};
+ std::size_t size_{0};
+ Terminator &terminator_;
+};
+} // namespace Fortran::runtime
+#endif // FLANG_RT_RUNTIME_STACK_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/stat.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/stat.cpp
new file mode 100644
index 00000000000..322b7282b70
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/stat.cpp
@@ -0,0 +1,110 @@
+//===-- lib/runtime/stat.cpp ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang-rt/runtime/stat.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+
+namespace Fortran::runtime {
+RT_OFFLOAD_API_GROUP_BEGIN
+
+RT_API_ATTRS const char *StatErrorString(int stat) {
+ switch (stat) {
+ case StatOk:
+ return "No error";
+
+ case StatBaseNull:
+ return "Base address is null";
+ case StatBaseNotNull:
+ return "Base address is not null";
+ case StatInvalidElemLen:
+ return "Invalid element length";
+ case StatInvalidRank:
+ return "Invalid rank";
+ case StatInvalidType:
+ return "Invalid type";
+ case StatInvalidAttribute:
+ return "Invalid attribute";
+ case StatInvalidExtent:
+ return "Invalid extent";
+ case StatInvalidDescriptor:
+ return "Invalid descriptor";
+ case StatMemAllocation:
+ return "Memory allocation failed";
+ case StatOutOfBounds:
+ return "Out of bounds";
+
+ case StatFailedImage:
+ return "Failed image";
+ case StatLocked:
+ return "Locked";
+ case StatLockedOtherImage:
+ return "Other image locked";
+ case StatStoppedImage:
+ return "Image stopped";
+ case StatUnlocked:
+ return "Unlocked";
+ case StatUnlockedFailedImage:
+ return "Failed image unlocked";
+
+ case StatInvalidArgumentNumber:
+ return "Invalid argument number";
+ case StatMissingArgument:
+ return "Missing argument";
+ case StatValueTooShort:
+ return "Value too short";
+
+ case StatMissingEnvVariable:
+ return "Missing environment variable";
+
+ case StatMoveAllocSameAllocatable:
+ return "MOVE_ALLOC passed the same address as to and from";
+
+ case StatBadPointerDeallocation:
+ return "DEALLOCATE of a pointer that is not the whole content of a pointer "
+ "ALLOCATE";
+
+ default:
+ return nullptr;
+ }
+}
+
+RT_API_ATTRS int ToErrmsg(const Descriptor *errmsg, int stat) {
+ if (stat != StatOk && errmsg && errmsg->raw().base_addr &&
+ errmsg->type() == TypeCode(TypeCategory::Character, 1) &&
+ errmsg->rank() == 0) {
+ if (const char *msg{StatErrorString(stat)}) {
+ char *buffer{errmsg->OffsetElement()};
+ std::size_t bufferLength{errmsg->ElementBytes()};
+ std::size_t msgLength{Fortran::runtime::strlen(msg)};
+ if (msgLength >= bufferLength) {
+ std::memcpy(buffer, msg, bufferLength);
+ } else {
+ std::memcpy(buffer, msg, msgLength);
+ std::memset(buffer + msgLength, ' ', bufferLength - msgLength);
+ }
+ }
+ }
+ return stat;
+}
+
+RT_API_ATTRS int ReturnError(
+ Terminator &terminator, int stat, const Descriptor *errmsg, bool hasStat) {
+ if (stat == StatOk || hasStat) {
+ return ToErrmsg(errmsg, stat);
+ } else if (const char *msg{StatErrorString(stat)}) {
+ terminator.Crash(msg);
+ } else {
+ terminator.Crash("Invalid Fortran runtime STAT= code %d", stat);
+ }
+ return stat;
+}
+
+RT_OFFLOAD_API_GROUP_END
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/stop.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/stop.cpp
new file mode 100644
index 00000000000..66b3c1d2a9b
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/stop.cpp
@@ -0,0 +1,229 @@
+//===-- lib/runtime/stop.cpp ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang/Runtime/stop.h"
+#include "config.h"
+#include "unit.h"
+#include "flang-rt/runtime/environment.h"
+#include "flang-rt/runtime/file.h"
+#include "flang-rt/runtime/io-error.h"
+#include "flang-rt/runtime/terminator.h"
+#include <cfenv>
+#include <cstdio>
+#include <cstdlib>
+
+#ifdef HAVE_BACKTRACE
+#include BACKTRACE_HEADER
+#endif
+
+extern "C" {
+
+[[maybe_unused]] static void DescribeIEEESignaledExceptions() {
+#ifdef fetestexcept // a macro in some environments; omit std::
+ auto excepts{fetestexcept(FE_ALL_EXCEPT)};
+#else
+ auto excepts{std::fetestexcept(FE_ALL_EXCEPT)};
+#endif
+ if (excepts) {
+ std::fputs("IEEE arithmetic exceptions signaled:", stderr);
+#ifdef FE_DIVBYZERO
+ if (excepts & FE_DIVBYZERO) {
+ std::fputs(" DIVBYZERO", stderr);
+ }
+#endif
+#ifdef FE_INEXACT
+ if (excepts & FE_INEXACT) {
+ std::fputs(" INEXACT", stderr);
+ }
+#endif
+#ifdef FE_INVALID
+ if (excepts & FE_INVALID) {
+ std::fputs(" INVALID", stderr);
+ }
+#endif
+#ifdef FE_OVERFLOW
+ if (excepts & FE_OVERFLOW) {
+ std::fputs(" OVERFLOW", stderr);
+ }
+#endif
+#ifdef FE_UNDERFLOW
+ if (excepts & FE_UNDERFLOW) {
+ std::fputs(" UNDERFLOW", stderr);
+ }
+#endif
+ std::fputc('\n', stderr);
+ }
+}
+
+static void CloseAllExternalUnits(const char *why) {
+ Fortran::runtime::io::IoErrorHandler handler{why};
+ Fortran::runtime::io::ExternalFileUnit::CloseAll(handler);
+}
+
+[[noreturn]] RT_API_ATTRS void RTNAME(StopStatement)(
+ int code, bool isErrorStop, bool quiet) {
+#if defined(RT_DEVICE_COMPILATION)
+ if (Fortran::runtime::executionEnvironment.noStopMessage && code == 0) {
+ quiet = true;
+ }
+ if (!quiet) {
+ if (isErrorStop) {
+ std::printf("Fortran ERROR STOP");
+ } else {
+ std::printf("Fortran STOP");
+ }
+ if (code != EXIT_SUCCESS) {
+ std::printf(": code %d\n", code);
+ }
+ std::printf("\n");
+ }
+ Fortran::runtime::DeviceTrap();
+#else
+ CloseAllExternalUnits("STOP statement");
+ if (Fortran::runtime::executionEnvironment.noStopMessage && code == 0) {
+ quiet = true;
+ }
+ if (!quiet) {
+ std::fprintf(stderr, "Fortran %s", isErrorStop ? "ERROR STOP" : "STOP");
+ if (code != EXIT_SUCCESS) {
+ std::fprintf(stderr, ": code %d\n", code);
+ }
+ std::fputc('\n', stderr);
+ DescribeIEEESignaledExceptions();
+ }
+ std::exit(code);
+#endif
+}
+
+[[noreturn]] RT_API_ATTRS void RTNAME(StopStatementText)(
+ const char *code, std::size_t length, bool isErrorStop, bool quiet) {
+#if defined(RT_DEVICE_COMPILATION)
+ if (!quiet) {
+ if (Fortran::runtime::executionEnvironment.noStopMessage && !isErrorStop) {
+ std::printf("%s\n", code);
+ } else {
+ std::printf(
+ "Fortran %s: %s\n", isErrorStop ? "ERROR STOP" : "STOP", code);
+ }
+ }
+ Fortran::runtime::DeviceTrap();
+#else
+ CloseAllExternalUnits("STOP statement");
+ if (!quiet) {
+ if (Fortran::runtime::executionEnvironment.noStopMessage && !isErrorStop) {
+ std::fprintf(stderr, "%.*s\n", static_cast<int>(length), code);
+ } else {
+ std::fprintf(stderr, "Fortran %s: %.*s\n",
+ isErrorStop ? "ERROR STOP" : "STOP", static_cast<int>(length), code);
+ }
+ DescribeIEEESignaledExceptions();
+ }
+ if (isErrorStop) {
+ std::exit(EXIT_FAILURE);
+ } else {
+ std::exit(EXIT_SUCCESS);
+ }
+#endif
+}
+
+static bool StartPause() {
+ if (Fortran::runtime::io::IsATerminal(0)) {
+ Fortran::runtime::io::IoErrorHandler handler{"PAUSE statement"};
+ Fortran::runtime::io::ExternalFileUnit::FlushAll(handler);
+ return true;
+ }
+ return false;
+}
+
+static void EndPause() {
+ std::fflush(nullptr);
+ if (std::fgetc(stdin) == EOF) {
+ CloseAllExternalUnits("PAUSE statement");
+ std::exit(EXIT_SUCCESS);
+ }
+}
+
+void RTNAME(PauseStatement)() {
+ if (StartPause()) {
+ std::fputs("Fortran PAUSE: hit RETURN to continue:", stderr);
+ EndPause();
+ }
+}
+
+void RTNAME(PauseStatementInt)(int code) {
+ if (StartPause()) {
+ std::fprintf(stderr, "Fortran PAUSE %d: hit RETURN to continue:", code);
+ EndPause();
+ }
+}
+
+void RTNAME(PauseStatementText)(const char *code, std::size_t length) {
+ if (StartPause()) {
+ std::fprintf(stderr,
+ "Fortran PAUSE %.*s: hit RETURN to continue:", static_cast<int>(length),
+ code);
+ EndPause();
+ }
+}
+
+[[noreturn]] void RTNAME(FailImageStatement)() {
+ Fortran::runtime::NotifyOtherImagesOfFailImageStatement();
+ CloseAllExternalUnits("FAIL IMAGE statement");
+ std::exit(EXIT_FAILURE);
+}
+
+[[noreturn]] void RTNAME(ProgramEndStatement)() {
+ CloseAllExternalUnits("END statement");
+ std::exit(EXIT_SUCCESS);
+}
+
+[[noreturn]] void RTNAME(Exit)(int status) {
+ CloseAllExternalUnits("CALL EXIT()");
+ std::exit(status);
+}
+
+static RT_NOINLINE_ATTR void PrintBacktrace() {
+#ifdef HAVE_BACKTRACE
+ // TODO: Need to parse DWARF information to print function line numbers
+ constexpr int MAX_CALL_STACK{999};
+ void *buffer[MAX_CALL_STACK];
+ int nptrs{(int)backtrace(buffer, MAX_CALL_STACK)};
+
+ if (char **symbols{backtrace_symbols(buffer, nptrs)}) {
+ // Skip the PrintBacktrace() frame, as it is just a utility.
+ // It makes sense to start printing the backtrace
+ // from Abort() or backtrace().
+ for (int i = 1; i < nptrs; i++) {
+ Fortran::runtime::Terminator{}.PrintCrashArgs(
+ "#%d %s\n", i - 1, symbols[i]);
+ }
+ free(symbols);
+ }
+
+#else
+
+ // TODO: Need to implement the version for other platforms.
+ Fortran::runtime::Terminator{}.PrintCrashArgs("backtrace is not supported.");
+
+#endif
+}
+
+[[noreturn]] RT_OPTNONE_ATTR void RTNAME(Abort)() {
+#ifdef HAVE_BACKTRACE
+ PrintBacktrace();
+#endif
+ std::abort();
+}
+
+RT_OPTNONE_ATTR void FORTRAN_PROCEDURE_NAME(backtrace)() { PrintBacktrace(); }
+
+[[noreturn]] RT_API_ATTRS void RTNAME(ReportFatalUserError)(
+ const char *message, const char *source, int line) {
+ Fortran::runtime::Terminator{source, line}.Crash(message);
+}
+}
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/sum.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/sum.cpp
new file mode 100644
index 00000000000..a76e228f18a
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/sum.cpp
@@ -0,0 +1,232 @@
+//===-- lib/runtime/sum.cpp -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Implements SUM for all required operand types and shapes.
+//
+// Real and complex SUM reductions attempt to reduce floating-point
+// cancellation on intermediate results by using "Kahan summation"
+// (basically the same as manual "double-double").
+
+#include "flang-rt/runtime/reduction-templates.h"
+#include "flang/Common/float128.h"
+#include "flang/Runtime/reduction.h"
+#include <cfloat>
+#include <cinttypes>
+#include <complex>
+
+namespace Fortran::runtime {
+
+template <typename INTERMEDIATE> class IntegerSumAccumulator {
+public:
+ explicit RT_API_ATTRS IntegerSumAccumulator(const Descriptor &array)
+ : array_{array} {}
+ void RT_API_ATTRS Reinitialize() { sum_ = 0; }
+ template <typename A>
+ RT_API_ATTRS void GetResult(A *p, int /*zeroBasedDim*/ = -1) const {
+ *p = static_cast<A>(sum_);
+ }
+ template <typename A>
+ RT_API_ATTRS bool AccumulateAt(const SubscriptValue at[]) {
+ sum_ += *array_.Element<A>(at);
+ return true;
+ }
+
+private:
+ const Descriptor &array_;
+ INTERMEDIATE sum_{0};
+};
+
+template <typename INTERMEDIATE> class RealSumAccumulator {
+public:
+ explicit RT_API_ATTRS RealSumAccumulator(const Descriptor &array)
+ : array_{array} {}
+ void RT_API_ATTRS Reinitialize() { sum_ = correction_ = 0; }
+ template <typename A> RT_API_ATTRS A Result() const { return sum_; }
+ template <typename A>
+ RT_API_ATTRS void GetResult(A *p, int /*zeroBasedDim*/ = -1) const {
+ *p = Result<A>();
+ }
+ template <typename A> RT_API_ATTRS bool Accumulate(A x) {
+ // Kahan summation
+ auto next{x - correction_};
+ auto oldSum{sum_};
+ sum_ += next;
+ correction_ = (sum_ - oldSum) - next; // algebraically zero
+ return true;
+ }
+ template <typename A>
+ RT_API_ATTRS bool AccumulateAt(const SubscriptValue at[]) {
+ return Accumulate(*array_.Element<A>(at));
+ }
+
+private:
+ const Descriptor &array_;
+ INTERMEDIATE sum_{0.0}, correction_{0.0};
+};
+
+template <typename PART> class ComplexSumAccumulator {
+public:
+ explicit RT_API_ATTRS ComplexSumAccumulator(const Descriptor &array)
+ : array_{array} {}
+ void RT_API_ATTRS Reinitialize() {
+ reals_.Reinitialize();
+ imaginaries_.Reinitialize();
+ }
+ template <typename A>
+ RT_API_ATTRS void GetResult(A *p, int /*zeroBasedDim*/ = -1) const {
+ using ResultPart = typename A::value_type;
+ *p = {reals_.template Result<ResultPart>(),
+ imaginaries_.template Result<ResultPart>()};
+ }
+ template <typename A> RT_API_ATTRS bool Accumulate(const A &z) {
+ reals_.Accumulate(z.real());
+ imaginaries_.Accumulate(z.imag());
+ return true;
+ }
+ template <typename A>
+ RT_API_ATTRS bool AccumulateAt(const SubscriptValue at[]) {
+ return Accumulate(*array_.Element<A>(at));
+ }
+
+private:
+ const Descriptor &array_;
+ RealSumAccumulator<PART> reals_{array_}, imaginaries_{array_};
+};
+
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+CppTypeFor<TypeCategory::Integer, 1> RTDEF(SumInteger1)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 1>(x, source, line, dim, mask,
+ IntegerSumAccumulator<CppTypeFor<TypeCategory::Integer, 4>>{x}, "SUM");
+}
+CppTypeFor<TypeCategory::Integer, 2> RTDEF(SumInteger2)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 2>(x, source, line, dim, mask,
+ IntegerSumAccumulator<CppTypeFor<TypeCategory::Integer, 4>>{x}, "SUM");
+}
+CppTypeFor<TypeCategory::Integer, 4> RTDEF(SumInteger4)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 4>(x, source, line, dim, mask,
+ IntegerSumAccumulator<CppTypeFor<TypeCategory::Integer, 4>>{x}, "SUM");
+}
+CppTypeFor<TypeCategory::Integer, 8> RTDEF(SumInteger8)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 8>(x, source, line, dim, mask,
+ IntegerSumAccumulator<CppTypeFor<TypeCategory::Integer, 8>>{x}, "SUM");
+}
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDEF(SumInteger16)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Integer, 16>(x, source, line, dim,
+ mask, IntegerSumAccumulator<CppTypeFor<TypeCategory::Integer, 16>>{x},
+ "SUM");
+}
+#endif
+
+CppTypeFor<TypeCategory::Unsigned, 1> RTDEF(SumUnsigned1)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Unsigned, 1>(x, source, line, dim,
+ mask, IntegerSumAccumulator<CppTypeFor<TypeCategory::Unsigned, 4>>{x},
+ "SUM");
+}
+CppTypeFor<TypeCategory::Unsigned, 2> RTDEF(SumUnsigned2)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Unsigned, 2>(x, source, line, dim,
+ mask, IntegerSumAccumulator<CppTypeFor<TypeCategory::Unsigned, 4>>{x},
+ "SUM");
+}
+CppTypeFor<TypeCategory::Unsigned, 4> RTDEF(SumUnsigned4)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Unsigned, 4>(x, source, line, dim,
+ mask, IntegerSumAccumulator<CppTypeFor<TypeCategory::Unsigned, 4>>{x},
+ "SUM");
+}
+CppTypeFor<TypeCategory::Unsigned, 8> RTDEF(SumUnsigned8)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Unsigned, 8>(x, source, line, dim,
+ mask, IntegerSumAccumulator<CppTypeFor<TypeCategory::Unsigned, 8>>{x},
+ "SUM");
+}
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Unsigned, 16> RTDEF(SumUnsigned16)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Unsigned, 16>(x, source, line, dim,
+ mask, IntegerSumAccumulator<CppTypeFor<TypeCategory::Unsigned, 16>>{x},
+ "SUM");
+}
+#endif
+
+// TODO: real/complex(2 & 3)
+CppTypeFor<TypeCategory::Real, 4> RTDEF(SumReal4)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Real, 4>(
+ x, source, line, dim, mask, RealSumAccumulator<float>{x}, "SUM");
+}
+CppTypeFor<TypeCategory::Real, 8> RTDEF(SumReal8)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Real, 8>(
+ x, source, line, dim, mask, RealSumAccumulator<double>{x}, "SUM");
+}
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDEF(SumReal10)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Real, 10>(x, source, line, dim, mask,
+ RealSumAccumulator<CppTypeFor<TypeCategory::Real, 10>>{x}, "SUM");
+}
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppTypeFor<TypeCategory::Real, 16> RTDEF(SumReal16)(const Descriptor &x,
+ const char *source, int line, int dim, const Descriptor *mask) {
+ return GetTotalReduction<TypeCategory::Real, 16>(x, source, line, dim, mask,
+ RealSumAccumulator<CppTypeFor<TypeCategory::Real, 16>>{x}, "SUM");
+}
+#endif
+
+void RTDEF(CppSumComplex4)(CppTypeFor<TypeCategory::Complex, 4> &result,
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ result = GetTotalReduction<TypeCategory::Complex, 4>(
+ x, source, line, dim, mask, ComplexSumAccumulator<float>{x}, "SUM");
+}
+void RTDEF(CppSumComplex8)(CppTypeFor<TypeCategory::Complex, 8> &result,
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ result = GetTotalReduction<TypeCategory::Complex, 8>(
+ x, source, line, dim, mask, ComplexSumAccumulator<double>{x}, "SUM");
+}
+#if HAS_FLOAT80
+void RTDEF(CppSumComplex10)(CppTypeFor<TypeCategory::Complex, 10> &result,
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ result =
+ GetTotalReduction<TypeCategory::Complex, 10>(x, source, line, dim, mask,
+ ComplexSumAccumulator<CppTypeFor<TypeCategory::Real, 10>>{x}, "SUM");
+}
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+void RTDEF(CppSumComplex16)(CppTypeFor<TypeCategory::Complex, 16> &result,
+ const Descriptor &x, const char *source, int line, int dim,
+ const Descriptor *mask) {
+ result =
+ GetTotalReduction<TypeCategory::Complex, 16>(x, source, line, dim, mask,
+ ComplexSumAccumulator<CppTypeFor<TypeCategory::Real, 16>>{x}, "SUM");
+}
+#endif
+
+void RTDEF(SumDim)(Descriptor &result, const Descriptor &x, int dim,
+ const char *source, int line, const Descriptor *mask) {
+ TypedPartialNumericReduction<IntegerSumAccumulator, RealSumAccumulator,
+ ComplexSumAccumulator, /*MIN_REAL_KIND=*/4>(
+ result, x, dim, source, line, mask, "SUM");
+}
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/support.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/support.cpp
new file mode 100644
index 00000000000..9beb46e48a1
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/support.cpp
@@ -0,0 +1,53 @@
+//===-- lib/runtime/support.cpp ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang/Runtime/support.h"
+#include "ISO_Fortran_util.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/type-info.h"
+
+namespace Fortran::runtime {
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+bool RTDEF(IsContiguous)(const Descriptor &descriptor) {
+ return descriptor.IsContiguous();
+}
+
+bool RTDEF(IsContiguousUpTo)(const Descriptor &descriptor, int dim) {
+ return descriptor.IsContiguous(dim);
+}
+
+bool RTDEF(IsAssumedSize)(const Descriptor &descriptor) {
+ return ISO::IsAssumedSize(&descriptor.raw());
+}
+
+void RTDEF(CopyAndUpdateDescriptor)(Descriptor &to, const Descriptor &from,
+ const typeInfo::DerivedType *newDynamicType,
+ ISO::CFI_attribute_t newAttribute, enum LowerBoundModifier newLowerBounds) {
+ to = from;
+ if (newDynamicType) {
+ DescriptorAddendum *toAddendum{to.Addendum()};
+ INTERNAL_CHECK(toAddendum);
+ toAddendum->set_derivedType(newDynamicType);
+ to.raw().elem_len = newDynamicType->sizeInBytes();
+ }
+ to.raw().attribute = newAttribute;
+ if (newLowerBounds != LowerBoundModifier::Preserve) {
+ const ISO::CFI_index_t newLowerBound{
+ newLowerBounds == LowerBoundModifier::SetToOnes ? 1 : 0};
+ const int rank{to.rank()};
+ for (int i = 0; i < rank; ++i) {
+ to.GetDimension(i).SetLowerBound(newLowerBound);
+ }
+ }
+}
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/temporary-stack.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/temporary-stack.cpp
new file mode 100644
index 00000000000..3f6fd8ee15a
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/temporary-stack.cpp
@@ -0,0 +1,227 @@
+//===-- lib/runtime/temporary-stack.cpp -------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Implements std::vector like storage for a dynamically resizable number of
+// temporaries. For use in HLFIR lowering.
+
+#include "flang/Runtime/temporary-stack.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/memory.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
+#include "flang/Runtime/assign.h"
+
+namespace {
+
+using namespace Fortran::runtime;
+
+// the number of elements to allocate when first creating the vector
+constexpr size_t INITIAL_ALLOC = 8;
+
+/// To store C style data. Does not run constructors/destructors.
+/// Not using std::vector to avoid linking the runtime library to stdc++
+template <bool COPY_VALUES> class DescriptorStorage final {
+ using size_type = uint64_t; // see checkedMultiply()
+
+ size_type capacity_{0};
+ size_type size_{0};
+ Descriptor **data_{nullptr};
+ Terminator terminator_;
+
+ // return true on overflow
+ static bool checkedMultiply(size_type x, size_type y, size_type &res);
+
+ void resize(size_type newCapacity);
+
+ Descriptor *cloneDescriptor(const Descriptor &source);
+
+public:
+ DescriptorStorage(const char *sourceFile, int line);
+ ~DescriptorStorage();
+
+ // `new` but using the runtime allocation API
+ static inline DescriptorStorage *allocate(const char *sourceFile, int line) {
+ Terminator term{sourceFile, line};
+ void *ptr = AllocateMemoryOrCrash(term, sizeof(DescriptorStorage));
+ return new (ptr) DescriptorStorage{sourceFile, line};
+ }
+
+ // `delete` but using the runtime allocation API
+ static inline void destroy(DescriptorStorage *instance) {
+ instance->~DescriptorStorage();
+ FreeMemory(instance);
+ }
+
+ // clones a descriptor into this storage
+ void push(const Descriptor &source);
+
+ // out must be big enough to hold a descriptor of the right rank and addendum
+ void pop(Descriptor &out);
+
+ // out must be big enough to hold a descriptor of the right rank and addendum
+ void at(size_type i, Descriptor &out);
+};
+
+using ValueStack = DescriptorStorage</*COPY_VALUES=*/true>;
+using DescriptorStack = DescriptorStorage</*COPY_VALUES=*/false>;
+} // namespace
+
+template <bool COPY_VALUES>
+bool DescriptorStorage<COPY_VALUES>::checkedMultiply(
+ size_type x, size_type y, size_type &res) {
+ // TODO: c++20 [[unlikely]]
+ if (x > UINT64_MAX / y) {
+ return true;
+ }
+ res = x * y;
+ return false;
+}
+
+template <bool COPY_VALUES>
+void DescriptorStorage<COPY_VALUES>::resize(size_type newCapacity) {
+ if (newCapacity <= capacity_) {
+ return;
+ }
+ size_type bytes;
+ if (checkedMultiply(newCapacity, sizeof(Descriptor *), bytes)) {
+ terminator_.Crash("temporary-stack: out of memory");
+ }
+ Descriptor **newData =
+ static_cast<Descriptor **>(AllocateMemoryOrCrash(terminator_, bytes));
+ // "memcpy" in glibc has a "nonnull" attribute on the source pointer.
+ // Avoid passing a null pointer, since it would result in an undefined
+ // behavior.
+ if (data_ != nullptr) {
+ memcpy(newData, data_, capacity_ * sizeof(Descriptor *));
+ FreeMemory(data_);
+ }
+ data_ = newData;
+ capacity_ = newCapacity;
+}
+
+template <bool COPY_VALUES>
+Descriptor *DescriptorStorage<COPY_VALUES>::cloneDescriptor(
+ const Descriptor &source) {
+ const std::size_t bytes = source.SizeInBytes();
+ void *memory = AllocateMemoryOrCrash(terminator_, bytes);
+ Descriptor *desc = new (memory) Descriptor{source};
+ return desc;
+}
+
+template <bool COPY_VALUES>
+DescriptorStorage<COPY_VALUES>::DescriptorStorage(
+ const char *sourceFile, int line)
+ : terminator_{sourceFile, line} {
+ resize(INITIAL_ALLOC);
+}
+
+template <bool COPY_VALUES>
+DescriptorStorage<COPY_VALUES>::~DescriptorStorage() {
+ for (size_type i = 0; i < size_; ++i) {
+ Descriptor *element = data_[i];
+ if constexpr (COPY_VALUES) {
+ element->Destroy(false, true);
+ }
+ FreeMemory(element);
+ }
+ FreeMemory(data_);
+}
+
+template <bool COPY_VALUES>
+void DescriptorStorage<COPY_VALUES>::push(const Descriptor &source) {
+ if (size_ == capacity_) {
+ size_type newSize;
+ if (checkedMultiply(capacity_, 2, newSize)) {
+ terminator_.Crash("temporary-stack: out of address space");
+ }
+ resize(newSize);
+ }
+ data_[size_] = cloneDescriptor(source);
+ Descriptor &box = *data_[size_];
+ size_ += 1;
+
+ if constexpr (COPY_VALUES) {
+ // copy the data pointed to by the box
+ box.set_base_addr(nullptr);
+ box.Allocate(kNoAsyncObject);
+ RTNAME(AssignTemporary)
+ (box, source, terminator_.sourceFileName(), terminator_.sourceLine());
+ }
+}
+
+template <bool COPY_VALUES>
+void DescriptorStorage<COPY_VALUES>::pop(Descriptor &out) {
+ if (size_ == 0) {
+ terminator_.Crash("temporary-stack: pop empty storage");
+ }
+ size_ -= 1;
+ Descriptor *ptr = data_[size_];
+ out = *ptr; // Descriptor::operator= handles the different sizes
+ FreeMemory(ptr);
+}
+
+template <bool COPY_VALUES>
+void DescriptorStorage<COPY_VALUES>::at(size_type i, Descriptor &out) {
+ if (i >= size_) {
+ terminator_.Crash("temporary-stack: out of bounds access");
+ }
+ Descriptor *ptr = data_[i];
+ out = *ptr; // Descriptor::operator= handles the different sizes
+}
+
+inline static ValueStack *getValueStorage(void *opaquePtr) {
+ return static_cast<ValueStack *>(opaquePtr);
+}
+inline static DescriptorStack *getDescriptorStorage(void *opaquePtr) {
+ return static_cast<DescriptorStack *>(opaquePtr);
+}
+
+namespace Fortran::runtime {
+extern "C" {
+void *RTNAME(CreateValueStack)(const char *sourceFile, int line) {
+ return ValueStack::allocate(sourceFile, line);
+}
+
+void RTNAME(PushValue)(void *opaquePtr, const Descriptor &value) {
+ getValueStorage(opaquePtr)->push(value);
+}
+
+void RTNAME(PopValue)(void *opaquePtr, Descriptor &value) {
+ getValueStorage(opaquePtr)->pop(value);
+}
+
+void RTNAME(ValueAt)(void *opaquePtr, uint64_t i, Descriptor &value) {
+ getValueStorage(opaquePtr)->at(i, value);
+}
+
+void RTNAME(DestroyValueStack)(void *opaquePtr) {
+ ValueStack::destroy(getValueStorage(opaquePtr));
+}
+
+void *RTNAME(CreateDescriptorStack)(const char *sourceFile, int line) {
+ return DescriptorStack::allocate(sourceFile, line);
+}
+
+void RTNAME(PushDescriptor)(void *opaquePtr, const Descriptor &value) {
+ getDescriptorStorage(opaquePtr)->push(value);
+}
+
+void RTNAME(PopDescriptor)(void *opaquePtr, Descriptor &value) {
+ getDescriptorStorage(opaquePtr)->pop(value);
+}
+
+void RTNAME(DescriptorAt)(void *opaquePtr, uint64_t i, Descriptor &value) {
+ getValueStorage(opaquePtr)->at(i, value);
+}
+
+void RTNAME(DestroyDescriptorStack)(void *opaquePtr) {
+ DescriptorStack::destroy(getDescriptorStorage(opaquePtr));
+}
+
+} // extern "C"
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/terminator.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/terminator.cpp
new file mode 100644
index 00000000000..97ca824342b
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/terminator.cpp
@@ -0,0 +1,103 @@
+//===-- lib/runtime/terminator.cpp ------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang-rt/runtime/terminator.h"
+#include <cstdio>
+#include <cstdlib>
+
+namespace Fortran::runtime {
+
+#if !defined(RT_DEVICE_COMPILATION)
+[[maybe_unused]] static void (*crashHandler)(
+ const char *, int, const char *, va_list &){nullptr};
+
+void Terminator::RegisterCrashHandler(
+ void (*handler)(const char *, int, const char *, va_list &)) {
+ crashHandler = handler;
+}
+
+void Terminator::InvokeCrashHandler(const char *message, ...) const {
+ if (crashHandler) {
+ va_list ap;
+ va_start(ap, message);
+ crashHandler(sourceFileName_, sourceLine_, message, ap);
+ va_end(ap);
+ }
+}
+
+[[noreturn]] void Terminator::CrashArgs(
+ const char *message, va_list &ap) const {
+ CrashHeader();
+ std::vfprintf(stderr, message, ap);
+ va_end(ap);
+ CrashFooter();
+}
+#endif
+
+RT_OFFLOAD_API_GROUP_BEGIN
+
+RT_API_ATTRS void Terminator::CrashHeader() const {
+#if defined(RT_DEVICE_COMPILATION)
+ std::printf("\nfatal Fortran runtime error");
+ if (sourceFileName_) {
+ std::printf("(%s", sourceFileName_);
+ if (sourceLine_) {
+ std::printf(":%d", sourceLine_);
+ }
+ std::printf(")");
+ }
+ std::printf(": ");
+#else
+ std::fputs("\nfatal Fortran runtime error", stderr);
+ if (sourceFileName_) {
+ std::fprintf(stderr, "(%s", sourceFileName_);
+ if (sourceLine_) {
+ std::fprintf(stderr, ":%d", sourceLine_);
+ }
+ fputc(')', stderr);
+ }
+ std::fputs(": ", stderr);
+#endif
+}
+
+[[noreturn]] RT_API_ATTRS void Terminator::CrashFooter() const {
+#if defined(RT_DEVICE_COMPILATION)
+ std::printf("\n");
+#else
+ fputc('\n', stderr);
+ // FIXME: re-enable the flush along with the IO enabling.
+ io::FlushOutputOnCrash(*this);
+#endif
+ NotifyOtherImagesOfErrorTermination();
+#if defined(RT_DEVICE_COMPILATION)
+ DeviceTrap();
+#else
+ std::abort();
+#endif
+}
+
+[[noreturn]] RT_API_ATTRS void Terminator::CheckFailed(
+ const char *predicate, const char *file, int line) const {
+ Crash("Internal error: RUNTIME_CHECK(%s) failed at %s(%d)", predicate, file,
+ line);
+}
+
+[[noreturn]] RT_API_ATTRS void Terminator::CheckFailed(
+ const char *predicate) const {
+ Crash("Internal error: RUNTIME_CHECK(%s) failed at %s(%d)", predicate,
+ sourceFileName_, sourceLine_);
+}
+
+// TODO: These will be defined in the coarray runtime library
+RT_API_ATTRS void NotifyOtherImagesOfNormalEnd() {}
+RT_API_ATTRS void NotifyOtherImagesOfFailImageStatement() {}
+RT_API_ATTRS void NotifyOtherImagesOfErrorTermination() {}
+
+RT_OFFLOAD_API_GROUP_END
+
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/time-intrinsic.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/time-intrinsic.cpp
new file mode 100644
index 00000000000..8988817a400
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/time-intrinsic.cpp
@@ -0,0 +1,580 @@
+//===-- lib/runtime/time-intrinsic.cpp --------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Implements time-related intrinsic subroutines.
+
+#include "flang/Runtime/time-intrinsic.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+#include "flang/Runtime/cpp-type.h"
+#include <algorithm>
+#include <cstdint>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <ctime>
+#ifdef _WIN32
+#include "flang/Common/windows-include.h"
+#else
+#include <sys/time.h> // gettimeofday
+#include <sys/times.h>
+#include <unistd.h>
+#endif
+
+// CPU_TIME (Fortran 2018 16.9.57)
+// SYSTEM_CLOCK (Fortran 2018 16.9.168)
+//
+// We can use std::clock() from the <ctime> header as a fallback implementation
+// that should be available everywhere. This may not provide the best resolution
+// and is particularly troublesome on (some?) POSIX systems where CLOCKS_PER_SEC
+// is defined as 10^6 regardless of the actual precision of std::clock().
+// Therefore, we will usually prefer platform-specific alternatives when they
+// are available.
+//
+// We can use SFINAE to choose a platform-specific alternative. To do so, we
+// introduce a helper function template, whose overload set will contain only
+// implementations relying on interfaces which are actually available. Each
+// overload will have a dummy parameter whose type indicates whether or not it
+// should be preferred. Any other parameters required for SFINAE should have
+// default values provided.
+namespace {
+// Types for the dummy parameter indicating the priority of a given overload.
+// We will invoke our helper with an integer literal argument, so the overload
+// with the highest priority should have the type int.
+using fallback_implementation = double;
+using preferred_implementation = int;
+
+// This is the fallback implementation, which should work everywhere.
+template <typename Unused = void> double GetCpuTime(fallback_implementation) {
+ std::clock_t timestamp{std::clock()};
+ if (timestamp != static_cast<std::clock_t>(-1)) {
+ return static_cast<double>(timestamp) / CLOCKS_PER_SEC;
+ }
+ // Return some negative value to represent failure.
+ return -1.0;
+}
+
+// struct timespec and timespec_get are not implemented in macOS 10.14. Using
+// it here limits which version of MacOS we are compatible with. Unfortunately
+// when building on newer MacOS for older MacOS it uses the new headers (with
+// a definition of struct timespec) but just errors on API calls so we can't use
+// overloading magic to trigger different implementations depending if struct
+// timespec is defined.
+#if defined __APPLE__
+#define NO_TIMESPEC
+#else
+#undef NO_TIMESPEC
+#endif
+
+#if defined __MINGW32__
+// clock_gettime is implemented in the pthread library for MinGW.
+// Using it here would mean that all programs that link libflang_rt are
+// required to also link to pthread. Instead, don't use the function.
+#undef CLOCKID_CPU_TIME
+#undef CLOCKID_ELAPSED_TIME
+#else
+// Determine what clock to use for CPU time.
+#if defined CLOCK_PROCESS_CPUTIME_ID
+#define CLOCKID_CPU_TIME CLOCK_PROCESS_CPUTIME_ID
+#elif defined CLOCK_THREAD_CPUTIME_ID
+#define CLOCKID_CPU_TIME CLOCK_THREAD_CPUTIME_ID
+#else
+#undef CLOCKID_CPU_TIME
+#endif
+
+// Determine what clock to use for elapsed time.
+#if defined CLOCK_MONOTONIC
+#define CLOCKID_ELAPSED_TIME CLOCK_MONOTONIC
+#elif defined CLOCK_REALTIME
+#define CLOCKID_ELAPSED_TIME CLOCK_REALTIME
+#else
+#undef CLOCKID_ELAPSED_TIME
+#endif
+#endif
+
+#ifdef CLOCKID_CPU_TIME
+#ifndef NO_TIMESPEC
+// POSIX implementation using clock_gettime. This is only enabled where
+// clock_gettime is available.
+template <typename T = int, typename U = struct timespec>
+double GetCpuTime(preferred_implementation,
+ // We need some dummy parameters to pass to decltype(clock_gettime).
+ T ClockId = 0, U *Timespec = nullptr,
+ decltype(clock_gettime(ClockId, Timespec)) *Enabled = nullptr) {
+ struct timespec tspec;
+ if (clock_gettime(CLOCKID_CPU_TIME, &tspec) == 0) {
+ return tspec.tv_nsec * 1.0e-9 + tspec.tv_sec;
+ }
+ // Return some negative value to represent failure.
+ return -1.0;
+}
+#endif // !NO_TIMESPEC
+#endif // CLOCKID_CPU_TIME
+
+using count_t = std::int64_t;
+using unsigned_count_t = std::uint64_t;
+
+// POSIX implementation using clock_gettime where available. The clock_gettime
+// result is in nanoseconds, which is converted as necessary to
+// - deciseconds for kind 1
+// - milliseconds for kinds 2, 4
+// - nanoseconds for kinds 8, 16
+constexpr unsigned_count_t DS_PER_SEC{10u};
+constexpr unsigned_count_t MS_PER_SEC{1'000u};
+[[maybe_unused]] constexpr unsigned_count_t US_PER_SEC{1'000'000u};
+constexpr unsigned_count_t NS_PER_SEC{1'000'000'000u};
+
+// Computes HUGE(INT(0,kind)) as an unsigned integer value.
+static constexpr inline unsigned_count_t GetHUGE(int kind) {
+ if (kind > 8) {
+ kind = 8;
+ }
+ return (unsigned_count_t{1} << ((8 * kind) - 1)) - 1;
+}
+
+count_t ConvertSecondsNanosecondsToCount(
+ int kind, unsigned_count_t sec, unsigned_count_t nsec) {
+ const unsigned_count_t huge{GetHUGE(kind)};
+ if (kind >= 8) {
+ return (sec * NS_PER_SEC + nsec) % (huge + 1);
+ } else if (kind >= 2) {
+ return (sec * MS_PER_SEC + (nsec / (NS_PER_SEC / MS_PER_SEC))) % (huge + 1);
+ } else { // kind == 1
+ return (sec * DS_PER_SEC + (nsec / (NS_PER_SEC / DS_PER_SEC))) % (huge + 1);
+ }
+}
+
+// Less accurate implementation only accurate to the nearest microsecond
+// (instead of nanosecond) for systems where `struct timespec` is not available.
+#if defined(NO_TIMESPEC) && !defined(_WIN32)
+// Function converts a struct timeval into the desired count to
+// be returned by the timing functions in accordance with the requested
+// kind at the call site.
+count_t ConvertTimevalToCount(int kind, const struct timeval &tval) {
+ unsigned_count_t sec{static_cast<unsigned_count_t>(tval.tv_sec)};
+ unsigned_count_t nsec{static_cast<unsigned_count_t>(tval.tv_usec) * 1000};
+ return ConvertSecondsNanosecondsToCount(kind, sec, nsec);
+}
+
+template <typename Unused = void>
+count_t GetSystemClockCount(int kind, fallback_implementation) {
+ struct timeval tval;
+
+ if (gettimeofday(&tval, /*timezone=*/nullptr) != 0) {
+ // Return -HUGE(COUNT) to represent failure.
+ return -static_cast<count_t>(GetHUGE(kind));
+ }
+
+ // Compute the timestamp as seconds plus nanoseconds in accordance
+ // with the requested kind at the call site.
+ return ConvertTimevalToCount(kind, tval);
+}
+
+#else
+
+// Function converts a std::timespec_t into the desired count to
+// be returned by the timing functions in accordance with the requested
+// kind at the call site.
+count_t ConvertTimeSpecToCount(int kind, const struct timespec &tspec) {
+ unsigned_count_t sec{static_cast<unsigned_count_t>(tspec.tv_sec)};
+ unsigned_count_t nsec{static_cast<unsigned_count_t>(tspec.tv_nsec)};
+ return ConvertSecondsNanosecondsToCount(kind, sec, nsec);
+}
+
+#ifndef _AIX
+// More accurate version with nanosecond accuracy
+template <typename Unused = void>
+count_t GetSystemClockCount(int kind, fallback_implementation) {
+ struct timespec tspec;
+
+ if (timespec_get(&tspec, TIME_UTC) < 0) {
+ // Return -HUGE(COUNT) to represent failure.
+ return -static_cast<count_t>(GetHUGE(kind));
+ }
+
+ // Compute the timestamp as seconds plus nanoseconds in accordance
+ // with the requested kind at the call site.
+ return ConvertTimeSpecToCount(kind, tspec);
+}
+#endif // !_AIX
+#endif // !NO_TIMESPEC
+
+template <typename Unused = void>
+count_t GetSystemClockCountRate(int kind, fallback_implementation) {
+#ifdef NO_TIMESPEC
+ return kind >= 8 ? US_PER_SEC : kind >= 2 ? MS_PER_SEC : DS_PER_SEC;
+#else
+ return kind >= 8 ? NS_PER_SEC : kind >= 2 ? MS_PER_SEC : DS_PER_SEC;
+#endif
+}
+
+template <typename Unused = void>
+count_t GetSystemClockCountMax(int kind, fallback_implementation) {
+ unsigned_count_t maxCount{GetHUGE(kind)};
+ return maxCount;
+}
+
+#ifndef NO_TIMESPEC
+#ifdef CLOCKID_ELAPSED_TIME
+template <typename T = int, typename U = struct timespec>
+count_t GetSystemClockCount(int kind, preferred_implementation,
+ // We need some dummy parameters to pass to decltype(clock_gettime).
+ T ClockId = 0, U *Timespec = nullptr,
+ decltype(clock_gettime(ClockId, Timespec)) *Enabled = nullptr) {
+ struct timespec tspec;
+ const unsigned_count_t huge{GetHUGE(kind)};
+ if (clock_gettime(CLOCKID_ELAPSED_TIME, &tspec) != 0) {
+ return -huge; // failure
+ }
+
+ // Compute the timestamp as seconds plus nanoseconds in accordance
+ // with the requested kind at the call site.
+ return ConvertTimeSpecToCount(kind, tspec);
+}
+#endif // CLOCKID_ELAPSED_TIME
+
+template <typename T = int, typename U = struct timespec>
+count_t GetSystemClockCountRate(int kind, preferred_implementation,
+ // We need some dummy parameters to pass to decltype(clock_gettime).
+ T ClockId = 0, U *Timespec = nullptr,
+ decltype(clock_gettime(ClockId, Timespec)) *Enabled = nullptr) {
+ return kind >= 8 ? NS_PER_SEC : kind >= 2 ? MS_PER_SEC : DS_PER_SEC;
+}
+
+template <typename T = int, typename U = struct timespec>
+count_t GetSystemClockCountMax(int kind, preferred_implementation,
+ // We need some dummy parameters to pass to decltype(clock_gettime).
+ T ClockId = 0, U *Timespec = nullptr,
+ decltype(clock_gettime(ClockId, Timespec)) *Enabled = nullptr) {
+ return GetHUGE(kind);
+}
+#endif // !NO_TIMESPEC
+
+// DATE_AND_TIME (Fortran 2018 16.9.59)
+
+// Helper to set an integer value to -HUGE
+template <int KIND> struct StoreNegativeHugeAt {
+ void operator()(
+ const Fortran::runtime::Descriptor &result, std::size_t at) const {
+ *result.ZeroBasedIndexedElement<Fortran::runtime::CppTypeFor<
+ Fortran::common::TypeCategory::Integer, KIND>>(at) =
+ -std::numeric_limits<Fortran::runtime::CppTypeFor<
+ Fortran::common::TypeCategory::Integer, KIND>>::max();
+ }
+};
+
+// Default implementation when date and time information is not available (set
+// strings to blanks and values to -HUGE as defined by the standard).
+static void DateAndTimeUnavailable(Fortran::runtime::Terminator &terminator,
+ char *date, std::size_t dateChars, char *time, std::size_t timeChars,
+ char *zone, std::size_t zoneChars,
+ const Fortran::runtime::Descriptor *values) {
+ if (date) {
+ std::memset(date, static_cast<int>(' '), dateChars);
+ }
+ if (time) {
+ std::memset(time, static_cast<int>(' '), timeChars);
+ }
+ if (zone) {
+ std::memset(zone, static_cast<int>(' '), zoneChars);
+ }
+ if (values) {
+ auto typeCode{values->type().GetCategoryAndKind()};
+ RUNTIME_CHECK(terminator,
+ values->rank() == 1 && values->GetDimension(0).Extent() >= 8 &&
+ typeCode &&
+ typeCode->first == Fortran::common::TypeCategory::Integer);
+ // DATE_AND_TIME values argument must have decimal range > 4. Do not accept
+ // KIND 1 here.
+ int kind{typeCode->second};
+ RUNTIME_CHECK(terminator, kind != 1);
+ for (std::size_t i = 0; i < 8; ++i) {
+ Fortran::runtime::ApplyIntegerKind<StoreNegativeHugeAt, void>(
+ kind, terminator, *values, i);
+ }
+ }
+}
+
+#ifndef _WIN32
+#ifdef _AIX
+// Compute the time difference from GMT/UTC to get around the behavior of
+// strfname on AIX that requires setting an environment variable for numeric
+// value for ZONE.
+// The ZONE and the VALUES(4) arguments of the DATE_AND_TIME intrinsic has
+// the resolution to the minute.
+static int computeUTCDiff(const tm &localTime, bool *err) {
+ tm utcTime;
+ const time_t timer{mktime(const_cast<tm *>(&localTime))};
+ if (timer < 0) {
+ *err = true;
+ return 0;
+ }
+
+ // Get the GMT/UTC time
+ if (gmtime_r(&timer, &utcTime) == nullptr) {
+ *err = true;
+ return 0;
+ }
+
+ // Adjust for day difference
+ auto dayDiff{localTime.tm_mday - utcTime.tm_mday};
+ auto localHr{localTime.tm_hour};
+ if (dayDiff > 0) {
+ if (dayDiff == 1) {
+ localHr += 24;
+ } else {
+ utcTime.tm_hour += 24;
+ }
+ } else if (dayDiff < 0) {
+ if (dayDiff == -1) {
+ utcTime.tm_hour += 24;
+ } else {
+ localHr += 24;
+ }
+ }
+ return (localHr * 60 + localTime.tm_min) -
+ (utcTime.tm_hour * 60 + utcTime.tm_min);
+}
+#endif
+
+static std::size_t getUTCOffsetToBuffer(
+ char *buffer, const std::size_t &buffSize, tm *localTime) {
+#ifdef _AIX
+ // format: +HHMM or -HHMM
+ bool err{false};
+ auto utcOffset{computeUTCDiff(*localTime, &err)};
+ auto hour{utcOffset / 60};
+ auto hrMin{hour * 100 + (utcOffset - hour * 60)};
+ auto n{sprintf(buffer, "%+05d", hrMin)};
+ return err ? 0 : n + 1;
+#else
+ return std::strftime(buffer, buffSize, "%z", localTime);
+#endif
+}
+
+// SFINAE helper to return the struct tm.tm_gmtoff which is not a POSIX standard
+// field.
+template <int KIND, typename TM = struct tm>
+Fortran::runtime::CppTypeFor<Fortran::common::TypeCategory::Integer, KIND>
+GetGmtOffset(const TM &tm, preferred_implementation,
+ decltype(tm.tm_gmtoff) *Enabled = nullptr) {
+ // Returns the GMT offset in minutes.
+ return tm.tm_gmtoff / 60;
+}
+template <int KIND, typename TM = struct tm>
+Fortran::runtime::CppTypeFor<Fortran::common::TypeCategory::Integer, KIND>
+GetGmtOffset(const TM &tm, fallback_implementation) {
+ // tm.tm_gmtoff is not available, there may be platform dependent alternatives
+ // (such as using timezone from <time.h> when available), but so far just
+ // return -HUGE to report that this information is not available.
+ const auto negHuge{-std::numeric_limits<Fortran::runtime::CppTypeFor<
+ Fortran::common::TypeCategory::Integer, KIND>>::max()};
+#ifdef _AIX
+ bool err{false};
+ auto diff{computeUTCDiff(tm, &err)};
+ if (err) {
+ return negHuge;
+ } else {
+ return diff;
+ }
+#else
+ return negHuge;
+#endif
+}
+template <typename TM = struct tm> struct GmtOffsetHelper {
+ template <int KIND> struct StoreGmtOffset {
+ void operator()(const Fortran::runtime::Descriptor &result, std::size_t at,
+ TM &tm) const {
+ *result.ZeroBasedIndexedElement<Fortran::runtime::CppTypeFor<
+ Fortran::common::TypeCategory::Integer, KIND>>(at) =
+ GetGmtOffset<KIND>(tm, 0);
+ }
+ };
+};
+
+// Dispatch to posix implementation where gettimeofday and localtime_r are
+// available.
+static void GetDateAndTime(Fortran::runtime::Terminator &terminator, char *date,
+ std::size_t dateChars, char *time, std::size_t timeChars, char *zone,
+ std::size_t zoneChars, const Fortran::runtime::Descriptor *values) {
+
+ timeval t;
+ if (gettimeofday(&t, nullptr) != 0) {
+ DateAndTimeUnavailable(
+ terminator, date, dateChars, time, timeChars, zone, zoneChars, values);
+ return;
+ }
+ time_t timer{t.tv_sec};
+ tm localTime;
+ localtime_r(&timer, &localTime);
+ std::intmax_t ms{t.tv_usec / 1000};
+
+ static constexpr std::size_t buffSize{16};
+ char buffer[buffSize];
+ auto copyBufferAndPad{
+ [&](char *dest, std::size_t destChars, std::size_t len) {
+ auto copyLen{std::min(len, destChars)};
+ std::memcpy(dest, buffer, copyLen);
+ for (auto i{copyLen}; i < destChars; ++i) {
+ dest[i] = ' ';
+ }
+ }};
+ if (date) {
+ auto len = std::strftime(buffer, buffSize, "%Y%m%d", &localTime);
+ copyBufferAndPad(date, dateChars, len);
+ }
+ if (time) {
+ auto len{std::snprintf(buffer, buffSize, "%02d%02d%02d.%03jd",
+ localTime.tm_hour, localTime.tm_min, localTime.tm_sec, ms)};
+ copyBufferAndPad(time, timeChars, len);
+ }
+ if (zone) {
+ // Note: this may leave the buffer empty on many platforms. Classic flang
+ // has a much more complex way of doing this (see __io_timezone in classic
+ // flang).
+ auto len{getUTCOffsetToBuffer(buffer, buffSize, &localTime)};
+ copyBufferAndPad(zone, zoneChars, len);
+ }
+ if (values) {
+ auto typeCode{values->type().GetCategoryAndKind()};
+ RUNTIME_CHECK(terminator,
+ values->rank() == 1 && values->GetDimension(0).Extent() >= 8 &&
+ typeCode &&
+ typeCode->first == Fortran::common::TypeCategory::Integer);
+ // DATE_AND_TIME values argument must have decimal range > 4. Do not accept
+ // KIND 1 here.
+ int kind{typeCode->second};
+ RUNTIME_CHECK(terminator, kind != 1);
+ auto storeIntegerAt = [&](std::size_t atIndex, std::int64_t value) {
+ Fortran::runtime::ApplyIntegerKind<Fortran::runtime::StoreIntegerAt,
+ void>(kind, terminator, *values, atIndex, value);
+ };
+ storeIntegerAt(0, localTime.tm_year + 1900);
+ storeIntegerAt(1, localTime.tm_mon + 1);
+ storeIntegerAt(2, localTime.tm_mday);
+ Fortran::runtime::ApplyIntegerKind<
+ GmtOffsetHelper<struct tm>::StoreGmtOffset, void>(
+ kind, terminator, *values, 3, localTime);
+ storeIntegerAt(4, localTime.tm_hour);
+ storeIntegerAt(5, localTime.tm_min);
+ storeIntegerAt(6, localTime.tm_sec);
+ storeIntegerAt(7, ms);
+ }
+}
+
+#else
+// Fallback implementation where gettimeofday or localtime_r are not both
+// available (e.g. windows).
+static void GetDateAndTime(Fortran::runtime::Terminator &terminator, char *date,
+ std::size_t dateChars, char *time, std::size_t timeChars, char *zone,
+ std::size_t zoneChars, const Fortran::runtime::Descriptor *values) {
+ // TODO: An actual implementation for non Posix system should be added.
+ // So far, implement as if the date and time is not available on those
+ // platforms.
+ DateAndTimeUnavailable(
+ terminator, date, dateChars, time, timeChars, zone, zoneChars, values);
+}
+#endif
+} // namespace
+
+namespace Fortran::runtime {
+extern "C" {
+
+double RTNAME(CpuTime)() { return GetCpuTime(0); }
+
+std::int64_t RTNAME(SystemClockCount)(int kind) {
+ return GetSystemClockCount(kind, 0);
+}
+
+std::int64_t RTNAME(SystemClockCountRate)(int kind) {
+ return GetSystemClockCountRate(kind, 0);
+}
+
+std::int64_t RTNAME(SystemClockCountMax)(int kind) {
+ return GetSystemClockCountMax(kind, 0);
+}
+
+void RTNAME(DateAndTime)(char *date, std::size_t dateChars, char *time,
+ std::size_t timeChars, char *zone, std::size_t zoneChars,
+ const char *source, int line, const Descriptor *values) {
+ Fortran::runtime::Terminator terminator{source, line};
+ return GetDateAndTime(
+ terminator, date, dateChars, time, timeChars, zone, zoneChars, values);
+}
+
+void RTNAME(Etime)(const Descriptor *values, const Descriptor *time,
+ const char *sourceFile, int line) {
+ Fortran::runtime::Terminator terminator{sourceFile, line};
+
+ double usrTime = -1.0, sysTime = -1.0, realTime = -1.0;
+
+#ifdef _WIN32
+ FILETIME creationTime;
+ FILETIME exitTime;
+ FILETIME kernelTime;
+ FILETIME userTime;
+
+ if (GetProcessTimes(GetCurrentProcess(), &creationTime, &exitTime,
+ &kernelTime, &userTime) == 0) {
+ ULARGE_INTEGER userSystemTime;
+ ULARGE_INTEGER kernelSystemTime;
+
+ memcpy(&userSystemTime, &userTime, sizeof(FILETIME));
+ memcpy(&kernelSystemTime, &kernelTime, sizeof(FILETIME));
+
+ usrTime = ((double)(userSystemTime.QuadPart)) / 10000000.0;
+ sysTime = ((double)(kernelSystemTime.QuadPart)) / 10000000.0;
+ realTime = usrTime + sysTime;
+ }
+#else
+ struct tms tms;
+ if (times(&tms) != (clock_t)-1) {
+ usrTime = ((double)(tms.tms_utime)) / sysconf(_SC_CLK_TCK);
+ sysTime = ((double)(tms.tms_stime)) / sysconf(_SC_CLK_TCK);
+ realTime = usrTime + sysTime;
+ }
+#endif
+
+ if (values) {
+ auto typeCode{values->type().GetCategoryAndKind()};
+ // ETIME values argument must have decimal range == 2.
+ RUNTIME_CHECK(terminator,
+ values->rank() == 1 && typeCode &&
+ typeCode->first == Fortran::common::TypeCategory::Real);
+ // Only accept KIND=4 here.
+ int kind{typeCode->second};
+ RUNTIME_CHECK(terminator, kind == 4);
+ auto extent{values->GetDimension(0).Extent()};
+ if (extent >= 1) {
+ ApplyFloatingPointKind<StoreFloatingPointAt, void>(
+ kind, terminator, *values, /* atIndex = */ 0, usrTime);
+ }
+ if (extent >= 2) {
+ ApplyFloatingPointKind<StoreFloatingPointAt, void>(
+ kind, terminator, *values, /* atIndex = */ 1, sysTime);
+ }
+ }
+
+ if (time) {
+ auto typeCode{time->type().GetCategoryAndKind()};
+ // ETIME time argument must have decimal range == 0.
+ RUNTIME_CHECK(terminator,
+ time->rank() == 0 && typeCode &&
+ typeCode->first == Fortran::common::TypeCategory::Real);
+ // Only accept KIND=4 here.
+ int kind{typeCode->second};
+ RUNTIME_CHECK(terminator, kind == 4);
+
+ ApplyFloatingPointKind<StoreFloatingPointAt, void>(
+ kind, terminator, *time, /* atIndex = */ 0, realTime);
+ }
+}
+
+} // extern "C"
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/tools.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/tools.cpp
new file mode 100644
index 00000000000..24d05f369fc
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/tools.cpp
@@ -0,0 +1,371 @@
+//===-- lib/runtime/tools.cpp -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang-rt/runtime/tools.h"
+#include "flang-rt/runtime/terminator.h"
+#include <algorithm>
+#include <cstdint>
+#include <cstdlib>
+#include <cstring>
+
+namespace Fortran::runtime {
+
+RT_OFFLOAD_API_GROUP_BEGIN
+
+RT_API_ATTRS std::size_t TrimTrailingSpaces(const char *s, std::size_t n) {
+ while (n > 0 && s[n - 1] == ' ') {
+ --n;
+ }
+ return n;
+}
+
+RT_API_ATTRS OwningPtr<char> SaveDefaultCharacter(
+ const char *s, std::size_t length, const Terminator &terminator) {
+ if (s) {
+ auto *p{static_cast<char *>(AllocateMemoryOrCrash(terminator, length + 1))};
+ std::memcpy(p, s, length);
+ p[length] = '\0';
+ return OwningPtr<char>{p};
+ } else {
+ return OwningPtr<char>{};
+ }
+}
+
+static RT_API_ATTRS bool CaseInsensitiveMatch(
+ const char *value, std::size_t length, const char *possibility) {
+ for (; length-- > 0; ++possibility) {
+ char ch{*value++};
+ if (ch >= 'a' && ch <= 'z') {
+ ch += 'A' - 'a';
+ }
+ if (*possibility != ch) {
+ if (*possibility != '\0' || ch != ' ') {
+ return false;
+ }
+ // Ignore trailing blanks (12.5.6.2 p1)
+ while (length-- > 0) {
+ if (*value++ != ' ') {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+ return *possibility == '\0';
+}
+
+RT_API_ATTRS int IdentifyValue(
+ const char *value, std::size_t length, const char *possibilities[]) {
+ if (value) {
+ for (int j{0}; possibilities[j]; ++j) {
+ if (CaseInsensitiveMatch(value, length, possibilities[j])) {
+ return j;
+ }
+ }
+ }
+ return -1;
+}
+
+RT_API_ATTRS void ToFortranDefaultCharacter(
+ char *to, std::size_t toLength, const char *from) {
+ std::size_t len{Fortran::runtime::strlen(from)};
+ if (len < toLength) {
+ std::memcpy(to, from, len);
+ std::memset(to + len, ' ', toLength - len);
+ } else {
+ std::memcpy(to, from, toLength);
+ }
+}
+
+RT_API_ATTRS void CheckConformability(const Descriptor &to, const Descriptor &x,
+ Terminator &terminator, const char *funcName, const char *toName,
+ const char *xName) {
+ if (x.rank() == 0) {
+ return; // scalar conforms with anything
+ }
+ int rank{to.rank()};
+ if (x.rank() != rank) {
+ terminator.Crash(
+ "Incompatible array arguments to %s: %s has rank %d but %s has rank %d",
+ funcName, toName, rank, xName, x.rank());
+ } else {
+ for (int j{0}; j < rank; ++j) {
+ auto toExtent{static_cast<std::int64_t>(to.GetDimension(j).Extent())};
+ auto xExtent{static_cast<std::int64_t>(x.GetDimension(j).Extent())};
+ if (xExtent != toExtent) {
+ terminator.Crash("Incompatible array arguments to %s: dimension %d of "
+ "%s has extent %" PRId64 " but %s has extent %" PRId64,
+ funcName, j + 1, toName, toExtent, xName, xExtent);
+ }
+ }
+ }
+}
+
+RT_API_ATTRS void CheckIntegerKind(
+ Terminator &terminator, int kind, const char *intrinsic) {
+ if (kind < 1 || kind > 16 || (kind & (kind - 1)) != 0) {
+ terminator.Crash("not yet implemented: INTEGER(KIND=%d) in %s intrinsic",
+ intrinsic, kind);
+ }
+}
+
+template <typename P, int RANK>
+RT_API_ATTRS void ShallowCopyDiscontiguousToDiscontiguous(
+ const Descriptor &to, const Descriptor &from) {
+ DescriptorIterator<RANK> toIt{to};
+ DescriptorIterator<RANK> fromIt{from};
+ // Knowing the size at compile time can enable memcpy inlining optimisations
+ constexpr std::size_t typeElementBytes{sizeof(P)};
+ // We might still need to check the actual size as a fallback
+ std::size_t elementBytes{to.ElementBytes()};
+ for (std::size_t n{to.Elements()}; n-- > 0;
+ toIt.Advance(), fromIt.Advance()) {
+ // typeElementBytes == 1 when P is a char - the non-specialised case
+ if constexpr (typeElementBytes != 1) {
+ std::memcpy(
+ toIt.template Get<P>(), fromIt.template Get<P>(), typeElementBytes);
+ } else {
+ std::memcpy(
+ toIt.template Get<P>(), fromIt.template Get<P>(), elementBytes);
+ }
+ }
+}
+
+// Explicitly instantiate the default case to conform to the C++ standard
+template RT_API_ATTRS void ShallowCopyDiscontiguousToDiscontiguous<char, -1>(
+ const Descriptor &to, const Descriptor &from);
+
+template <typename P, int RANK>
+RT_API_ATTRS void ShallowCopyDiscontiguousToContiguous(
+ const Descriptor &to, const Descriptor &from) {
+ char *toAt{to.OffsetElement()};
+ constexpr std::size_t typeElementBytes{sizeof(P)};
+ std::size_t elementBytes{to.ElementBytes()};
+ DescriptorIterator<RANK> fromIt{from};
+ for (std::size_t n{to.Elements()}; n-- > 0;
+ toAt += elementBytes, fromIt.Advance()) {
+ if constexpr (typeElementBytes != 1) {
+ std::memcpy(toAt, fromIt.template Get<P>(), typeElementBytes);
+ } else {
+ std::memcpy(toAt, fromIt.template Get<P>(), elementBytes);
+ }
+ }
+}
+
+template RT_API_ATTRS void ShallowCopyDiscontiguousToContiguous<char, -1>(
+ const Descriptor &to, const Descriptor &from);
+
+template <typename P, int RANK>
+RT_API_ATTRS void ShallowCopyContiguousToDiscontiguous(
+ const Descriptor &to, const Descriptor &from) {
+ char *fromAt{from.OffsetElement()};
+ DescriptorIterator<RANK> toIt{to};
+ constexpr std::size_t typeElementBytes{sizeof(P)};
+ std::size_t elementBytes{to.ElementBytes()};
+ for (std::size_t n{to.Elements()}; n-- > 0;
+ toIt.Advance(), fromAt += elementBytes) {
+ if constexpr (typeElementBytes != 1) {
+ std::memcpy(toIt.template Get<P>(), fromAt, typeElementBytes);
+ } else {
+ std::memcpy(toIt.template Get<P>(), fromAt, elementBytes);
+ }
+ }
+}
+
+template RT_API_ATTRS void ShallowCopyContiguousToDiscontiguous<char, -1>(
+ const Descriptor &to, const Descriptor &from);
+
+// ShallowCopy helper for calling the correct specialised variant based on
+// scenario
+template <typename P, int RANK = -1>
+RT_API_ATTRS void ShallowCopyInner(const Descriptor &to, const Descriptor &from,
+ bool toIsContiguous, bool fromIsContiguous) {
+ if (toIsContiguous) {
+ if (fromIsContiguous) {
+ std::memcpy(to.OffsetElement(), from.OffsetElement(),
+ to.Elements() * to.ElementBytes());
+ } else {
+ ShallowCopyDiscontiguousToContiguous<P, RANK>(to, from);
+ }
+ } else {
+ if (fromIsContiguous) {
+ ShallowCopyContiguousToDiscontiguous<P, RANK>(to, from);
+ } else {
+ ShallowCopyDiscontiguousToDiscontiguous<P, RANK>(to, from);
+ }
+ }
+}
+
+// Most arrays are much closer to rank-1 than to maxRank.
+// Doing the recursion upwards instead of downwards puts the more common
+// cases earlier in the if-chain and has a tangible impact on performance.
+template <typename P, int RANK> struct ShallowCopyRankSpecialize {
+ static RT_API_ATTRS bool execute(const Descriptor &to, const Descriptor &from,
+ bool toIsContiguous, bool fromIsContiguous) {
+ if (to.rank() == RANK && from.rank() == RANK) {
+ ShallowCopyInner<P, RANK>(to, from, toIsContiguous, fromIsContiguous);
+ return true;
+ }
+ return ShallowCopyRankSpecialize<P, RANK + 1>::execute(
+ to, from, toIsContiguous, fromIsContiguous);
+ }
+};
+
+template <typename P> struct ShallowCopyRankSpecialize<P, maxRank + 1> {
+ static RT_API_ATTRS bool execute(const Descriptor &to, const Descriptor &from,
+ bool toIsContiguous, bool fromIsContiguous) {
+ return false;
+ }
+};
+
+// ShallowCopy helper for specialising the variants based on array rank
+template <typename P>
+RT_API_ATTRS void ShallowCopyRank(const Descriptor &to, const Descriptor &from,
+ bool toIsContiguous, bool fromIsContiguous) {
+ // Try to call a specialised ShallowCopy variant from rank-1 up to maxRank
+ bool specialized{ShallowCopyRankSpecialize<P, 1>::execute(
+ to, from, toIsContiguous, fromIsContiguous)};
+ if (!specialized) {
+ ShallowCopyInner<P>(to, from, toIsContiguous, fromIsContiguous);
+ }
+}
+
+RT_API_ATTRS void ShallowCopy(const Descriptor &to, const Descriptor &from,
+ bool toIsContiguous, bool fromIsContiguous) {
+ std::size_t elementBytes{to.ElementBytes()};
+ // Checking the type at runtime and making sure the pointer passed to memcpy
+ // has a type that matches the element type makes it possible for the compiler
+ // to optimise out the memcpy calls altogether and can substantially improve
+ // performance for some applications.
+ if (to.type().IsInteger()) {
+ if (elementBytes == sizeof(int64_t)) {
+ ShallowCopyRank<int64_t>(to, from, toIsContiguous, fromIsContiguous);
+ } else if (elementBytes == sizeof(int32_t)) {
+ ShallowCopyRank<int32_t>(to, from, toIsContiguous, fromIsContiguous);
+ } else if (elementBytes == sizeof(int16_t)) {
+ ShallowCopyRank<int16_t>(to, from, toIsContiguous, fromIsContiguous);
+#if defined USING_NATIVE_INT128_T
+ } else if (elementBytes == sizeof(__int128_t)) {
+ ShallowCopyRank<__int128_t>(to, from, toIsContiguous, fromIsContiguous);
+#endif
+ } else {
+ ShallowCopyRank<char>(to, from, toIsContiguous, fromIsContiguous);
+ }
+ } else if (to.type().IsReal()) {
+ if (elementBytes == sizeof(double)) {
+ ShallowCopyRank<double>(to, from, toIsContiguous, fromIsContiguous);
+ } else if (elementBytes == sizeof(float)) {
+ ShallowCopyRank<float>(to, from, toIsContiguous, fromIsContiguous);
+ } else {
+ ShallowCopyRank<char>(to, from, toIsContiguous, fromIsContiguous);
+ }
+ } else {
+ ShallowCopyRank<char>(to, from, toIsContiguous, fromIsContiguous);
+ }
+}
+
+RT_API_ATTRS void ShallowCopy(const Descriptor &to, const Descriptor &from) {
+ ShallowCopy(to, from, to.IsContiguous(), from.IsContiguous());
+}
+
+RT_API_ATTRS char *EnsureNullTerminated(
+ char *str, std::size_t length, Terminator &terminator) {
+ if (runtime::memchr(str, '\0', length) == nullptr) {
+ char *newCmd{(char *)AllocateMemoryOrCrash(terminator, length + 1)};
+ std::memcpy(newCmd, str, length);
+ newCmd[length] = '\0';
+ return newCmd;
+ } else {
+ return str;
+ }
+}
+
+RT_API_ATTRS bool IsValidCharDescriptor(const Descriptor *value) {
+ return value && value->IsAllocated() &&
+ value->type() == TypeCode(TypeCategory::Character, 1) &&
+ value->rank() == 0;
+}
+
+RT_API_ATTRS bool IsValidIntDescriptor(const Descriptor *intVal) {
+ // Check that our descriptor is allocated and is a scalar integer with
+ // kind != 1 (i.e. with a large enough decimal exponent range).
+ return intVal && intVal->IsAllocated() && intVal->rank() == 0 &&
+ intVal->type().IsInteger() && intVal->type().GetCategoryAndKind() &&
+ intVal->type().GetCategoryAndKind()->second != 1;
+}
+
+RT_API_ATTRS std::int32_t CopyCharsToDescriptor(const Descriptor &value,
+ const char *rawValue, std::size_t rawValueLength, const Descriptor *errmsg,
+ std::size_t offset) {
+
+ const std::int64_t toCopy{std::min(static_cast<std::int64_t>(rawValueLength),
+ static_cast<std::int64_t>(value.ElementBytes() - offset))};
+ if (toCopy < 0) {
+ return ToErrmsg(errmsg, StatValueTooShort);
+ }
+
+ std::memcpy(value.OffsetElement(offset), rawValue, toCopy);
+
+ if (static_cast<std::int64_t>(rawValueLength) > toCopy) {
+ return ToErrmsg(errmsg, StatValueTooShort);
+ }
+
+ return StatOk;
+}
+
+RT_API_ATTRS void StoreIntToDescriptor(
+ const Descriptor *length, std::int64_t value, Terminator &terminator) {
+ auto typeCode{length->type().GetCategoryAndKind()};
+ int kind{typeCode->second};
+ ApplyIntegerKind<StoreIntegerAt, void>(
+ kind, terminator, *length, /* atIndex = */ 0, value);
+}
+
+template <int KIND> struct FitsInIntegerKind {
+ RT_API_ATTRS bool operator()([[maybe_unused]] std::int64_t value) {
+ if constexpr (KIND >= 8) {
+ return true;
+ } else {
+ return value <=
+ std::numeric_limits<
+ CppTypeFor<Fortran::common::TypeCategory::Integer, KIND>>::max();
+ }
+ }
+};
+
+// Utility: establishes & allocates the result array for a partial
+// reduction (i.e., one with DIM=).
+RT_API_ATTRS void CreatePartialReductionResult(Descriptor &result,
+ const Descriptor &x, std::size_t resultElementSize, int dim,
+ Terminator &terminator, const char *intrinsic, TypeCode typeCode) {
+ int xRank{x.rank()};
+ if (dim < 1 || dim > xRank) {
+ terminator.Crash(
+ "%s: bad DIM=%d for ARRAY with rank %d", intrinsic, dim, xRank);
+ }
+ int zeroBasedDim{dim - 1};
+ SubscriptValue resultExtent[maxRank];
+ for (int j{0}; j < zeroBasedDim; ++j) {
+ resultExtent[j] = x.GetDimension(j).Extent();
+ }
+ for (int j{zeroBasedDim + 1}; j < xRank; ++j) {
+ resultExtent[j - 1] = x.GetDimension(j).Extent();
+ }
+ result.Establish(typeCode, resultElementSize, nullptr, xRank - 1,
+ resultExtent, CFI_attribute_allocatable);
+ for (int j{0}; j + 1 < xRank; ++j) {
+ result.GetDimension(j).SetBounds(1, resultExtent[j]);
+ }
+ if (int stat{result.Allocate(kNoAsyncObject)}) {
+ terminator.Crash(
+ "%s: could not allocate memory for result; STAT=%d", intrinsic, stat);
+ }
+}
+
+RT_OFFLOAD_API_GROUP_END
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/transformational.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/transformational.cpp
new file mode 100644
index 00000000000..3df314a4e96
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/transformational.cpp
@@ -0,0 +1,999 @@
+//===-- lib/runtime/transformational.cpp ------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Implements the transformational intrinsic functions of Fortran 2018 that
+// rearrange or duplicate data without (much) regard to type. These are
+// CSHIFT, EOSHIFT, PACK, RESHAPE, SPREAD, TRANSPOSE, and UNPACK.
+//
+// Many of these are defined in the 2018 standard with text that makes sense
+// only if argument arrays have lower bounds of one. Rather than interpret
+// these cases as implying a hidden constraint, these implementations
+// work with arbitrary lower bounds. This may be technically an extension
+// of the standard but it more likely to conform with its intent.
+
+#include "flang/Runtime/transformational.h"
+#include "copy.h"
+#include "flang-rt/runtime/descriptor.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+#include "flang-rt/runtime/type-info.h"
+#include "flang/Common/float128.h"
+
+namespace Fortran::runtime {
+
+// Utility for CSHIFT & EOSHIFT rank > 1 cases that determines the shift count
+// for each of the vector sections of the result.
+class ShiftControl {
+public:
+ RT_API_ATTRS ShiftControl(const Descriptor &s, Terminator &t, int dim)
+ : shift_{s}, terminator_{t}, shiftRank_{s.rank()}, dim_{dim} {}
+ RT_API_ATTRS void Init(const Descriptor &source, const char *which) {
+ int rank{source.rank()};
+ RUNTIME_CHECK(terminator_, shiftRank_ == 0 || shiftRank_ == rank - 1);
+ auto catAndKind{shift_.type().GetCategoryAndKind()};
+ RUNTIME_CHECK(
+ terminator_, catAndKind && catAndKind->first == TypeCategory::Integer);
+ shiftElemLen_ = catAndKind->second;
+ if (shiftRank_ > 0) {
+ int k{0};
+ for (int j{0}; j < rank; ++j) {
+ if (j + 1 != dim_) {
+ const Dimension &shiftDim{shift_.GetDimension(k)};
+ lb_[k++] = shiftDim.LowerBound();
+ if (shiftDim.Extent() != source.GetDimension(j).Extent()) {
+ terminator_.Crash("%s: on dimension %d, SHIFT= has extent %jd but "
+ "ARRAY= has extent %jd",
+ which, k, static_cast<std::intmax_t>(shiftDim.Extent()),
+ static_cast<std::intmax_t>(source.GetDimension(j).Extent()));
+ }
+ }
+ }
+ } else if (auto count{GetInt64Safe(
+ shift_.OffsetElement<char>(), shiftElemLen_, terminator_)}) {
+ shiftCount_ = *count;
+ } else {
+ terminator_.Crash("%s: SHIFT= value exceeds 64 bits", which);
+ }
+ }
+ RT_API_ATTRS SubscriptValue GetShift(const SubscriptValue resultAt[]) const {
+ if (shiftRank_ > 0) {
+ SubscriptValue shiftAt[maxRank];
+ int k{0};
+ for (int j{0}; j < shiftRank_ + 1; ++j) {
+ if (j + 1 != dim_) {
+ shiftAt[k] = lb_[k] + resultAt[j] - 1;
+ ++k;
+ }
+ }
+ auto count{GetInt64Safe(
+ shift_.Element<char>(shiftAt), shiftElemLen_, terminator_)};
+ RUNTIME_CHECK(terminator_, count.has_value());
+ return *count;
+ } else {
+ return shiftCount_; // invariant count extracted in Init()
+ }
+ }
+
+private:
+ const Descriptor &shift_;
+ Terminator &terminator_;
+ int shiftRank_;
+ int dim_;
+ SubscriptValue lb_[maxRank];
+ std::size_t shiftElemLen_;
+ SubscriptValue shiftCount_{};
+};
+
+// Fill an EOSHIFT result with default boundary values
+static RT_API_ATTRS void DefaultInitialize(
+ const Descriptor &result, Terminator &terminator) {
+ auto catAndKind{result.type().GetCategoryAndKind()};
+ RUNTIME_CHECK(
+ terminator, catAndKind && catAndKind->first != TypeCategory::Derived);
+ std::size_t elementLen{result.ElementBytes()};
+ std::size_t bytes{result.Elements() * elementLen};
+ if (catAndKind->first == TypeCategory::Character) {
+ switch (int kind{catAndKind->second}) {
+ case 1:
+ Fortran::runtime::fill_n(result.OffsetElement<char>(), bytes, ' ');
+ break;
+ case 2:
+ Fortran::runtime::fill_n(result.OffsetElement<char16_t>(), bytes / 2,
+ static_cast<char16_t>(' '));
+ break;
+ case 4:
+ Fortran::runtime::fill_n(result.OffsetElement<char32_t>(), bytes / 4,
+ static_cast<char32_t>(' '));
+ break;
+ default:
+ terminator.Crash(
+ "not yet implemented: CHARACTER(KIND=%d) in EOSHIFT intrinsic", kind);
+ }
+ } else {
+ std::memset(result.raw().base_addr, 0, bytes);
+ }
+}
+
+static inline RT_API_ATTRS std::size_t AllocateResult(Descriptor &result,
+ const Descriptor &source, int rank, const SubscriptValue extent[],
+ Terminator &terminator, const char *function) {
+ std::size_t elementLen{source.ElementBytes()};
+ const DescriptorAddendum *sourceAddendum{source.Addendum()};
+ result.Establish(source.type(), elementLen, nullptr, rank, extent,
+ CFI_attribute_allocatable, sourceAddendum != nullptr);
+ if (sourceAddendum) {
+ *result.Addendum() = *sourceAddendum;
+ }
+ for (int j{0}; j < rank; ++j) {
+ result.GetDimension(j).SetBounds(1, extent[j]);
+ }
+ if (int stat{result.Allocate(kNoAsyncObject)}) {
+ terminator.Crash(
+ "%s: Could not allocate memory for result (stat=%d)", function, stat);
+ }
+ return elementLen;
+}
+
+template <TypeCategory CAT, int KIND>
+static inline RT_API_ATTRS std::size_t AllocateBesselResult(Descriptor &result,
+ int32_t n1, int32_t n2, Terminator &terminator, const char *function) {
+ int rank{1};
+ SubscriptValue extent[maxRank];
+ for (int j{0}; j < maxRank; j++) {
+ extent[j] = 0;
+ }
+ if (n1 <= n2) {
+ extent[0] = n2 - n1 + 1;
+ }
+
+ std::size_t elementLen{Descriptor::BytesFor(CAT, KIND)};
+ result.Establish(TypeCode{CAT, KIND}, elementLen, nullptr, rank, extent,
+ CFI_attribute_allocatable, false);
+ for (int j{0}; j < rank; ++j) {
+ result.GetDimension(j).SetBounds(1, extent[j]);
+ }
+ if (int stat{result.Allocate(kNoAsyncObject)}) {
+ terminator.Crash(
+ "%s: Could not allocate memory for result (stat=%d)", function, stat);
+ }
+ return elementLen;
+}
+
+template <TypeCategory CAT, int KIND>
+static inline RT_API_ATTRS void DoBesselJn(Descriptor &result, int32_t n1,
+ int32_t n2, CppTypeFor<CAT, KIND> x, CppTypeFor<CAT, KIND> bn2,
+ CppTypeFor<CAT, KIND> bn2_1, const char *sourceFile, int line) {
+ Terminator terminator{sourceFile, line};
+ AllocateBesselResult<CAT, KIND>(result, n1, n2, terminator, "BESSEL_JN");
+
+ // The standard requires that n1 and n2 be non-negative. However, some other
+ // compilers generate results even when n1 and/or n2 are negative. For now,
+ // we also do not enforce the non-negativity constraint.
+ if (n2 < n1) {
+ return;
+ }
+
+ SubscriptValue at[maxRank];
+ for (int j{0}; j < maxRank; ++j) {
+ at[j] = 0;
+ }
+
+ // if n2 >= n1, there will be at least one element in the result.
+ at[0] = n2 - n1 + 1;
+ *result.Element<CppTypeFor<CAT, KIND>>(at) = bn2;
+
+ if (n2 == n1) {
+ return;
+ }
+
+ at[0] = n2 - n1;
+ *result.Element<CppTypeFor<CAT, KIND>>(at) = bn2_1;
+
+ // Bessel functions of the first kind are stable for a backward recursion
+ // (see https://dlmf.nist.gov/10.74.iv and https://dlmf.nist.gov/10.6.E1).
+ //
+ // J(n-1, x) = (2.0 / x) * n * J(n, x) - J(n+1, x)
+ //
+ // which is equivalent to
+ //
+ // J(n, x) = (2.0 / x) * (n + 1) * J(n+1, x) - J(n+2, x)
+ //
+ CppTypeFor<CAT, KIND> bn_2 = bn2;
+ CppTypeFor<CAT, KIND> bn_1 = bn2_1;
+ CppTypeFor<CAT, KIND> twoOverX = 2.0 / x;
+ for (int n{n2 - 2}; n >= n1; --n) {
+ auto bn = twoOverX * (n + 1) * bn_1 - bn_2;
+
+ at[0] = n - n1 + 1;
+ *result.Element<CppTypeFor<CAT, KIND>>(at) = bn;
+
+ bn_2 = bn_1;
+ bn_1 = bn;
+ }
+}
+
+template <TypeCategory CAT, int KIND>
+static inline RT_API_ATTRS void DoBesselJnX0(Descriptor &result, int32_t n1,
+ int32_t n2, const char *sourceFile, int line) {
+ Terminator terminator{sourceFile, line};
+ AllocateBesselResult<CAT, KIND>(result, n1, n2, terminator, "BESSEL_JN");
+
+ // The standard requires that n1 and n2 be non-negative. However, some other
+ // compilers generate results even when n1 and/or n2 are negative. For now,
+ // we also do not enforce the non-negativity constraint.
+ if (n2 < n1) {
+ return;
+ }
+
+ SubscriptValue at[maxRank];
+ for (int j{0}; j < maxRank; ++j) {
+ at[j] = 0;
+ }
+
+ // J(0, 0.0) = 1.0, when n == 0.
+ // J(n, 0.0) = 0.0, when n > 0.
+ at[0] = 1;
+ *result.Element<CppTypeFor<CAT, KIND>>(at) = (n1 == 0) ? 1.0 : 0.0;
+ for (int j{2}; j <= n2 - n1 + 1; ++j) {
+ at[0] = j;
+ *result.Element<CppTypeFor<CAT, KIND>>(at) = 0.0;
+ }
+}
+
+template <TypeCategory CAT, int KIND>
+static inline RT_API_ATTRS void DoBesselYn(Descriptor &result, int32_t n1,
+ int32_t n2, CppTypeFor<CAT, KIND> x, CppTypeFor<CAT, KIND> bn1,
+ CppTypeFor<CAT, KIND> bn1_1, const char *sourceFile, int line) {
+ Terminator terminator{sourceFile, line};
+ AllocateBesselResult<CAT, KIND>(result, n1, n2, terminator, "BESSEL_YN");
+
+ // The standard requires that n1 and n2 be non-negative. However, some other
+ // compilers generate results even when n1 and/or n2 are negative. For now,
+ // we also do not enforce the non-negativity constraint.
+ if (n2 < n1) {
+ return;
+ }
+
+ SubscriptValue at[maxRank];
+ for (int j{0}; j < maxRank; ++j) {
+ at[j] = 0;
+ }
+
+ // if n2 >= n1, there will be at least one element in the result.
+ at[0] = 1;
+ *result.Element<CppTypeFor<CAT, KIND>>(at) = bn1;
+
+ if (n2 == n1) {
+ return;
+ }
+
+ at[0] = 2;
+ *result.Element<CppTypeFor<CAT, KIND>>(at) = bn1_1;
+
+ // Bessel functions of the second kind are stable for a forward recursion
+ // (see https://dlmf.nist.gov/10.74.iv and https://dlmf.nist.gov/10.6.E1).
+ //
+ // Y(n+1, x) = (2.0 / x) * n * Y(n, x) - Y(n-1, x)
+ //
+ // which is equivalent to
+ //
+ // Y(n, x) = (2.0 / x) * (n - 1) * Y(n-1, x) - Y(n-2, x)
+ //
+ CppTypeFor<CAT, KIND> bn_2 = bn1;
+ CppTypeFor<CAT, KIND> bn_1 = bn1_1;
+ CppTypeFor<CAT, KIND> twoOverX = 2.0 / x;
+ for (int n{n1 + 2}; n <= n2; ++n) {
+ auto bn = twoOverX * (n - 1) * bn_1 - bn_2;
+
+ at[0] = n - n1 + 1;
+ *result.Element<CppTypeFor<CAT, KIND>>(at) = bn;
+
+ bn_2 = bn_1;
+ bn_1 = bn;
+ }
+}
+
+template <TypeCategory CAT, int KIND>
+static inline RT_API_ATTRS void DoBesselYnX0(Descriptor &result, int32_t n1,
+ int32_t n2, const char *sourceFile, int line) {
+ Terminator terminator{sourceFile, line};
+ AllocateBesselResult<CAT, KIND>(result, n1, n2, terminator, "BESSEL_YN");
+
+ // The standard requires that n1 and n2 be non-negative. However, some other
+ // compilers generate results even when n1 and/or n2 are negative. For now,
+ // we also do not enforce the non-negativity constraint.
+ if (n2 < n1) {
+ return;
+ }
+
+ SubscriptValue at[maxRank];
+ for (int j{0}; j < maxRank; ++j) {
+ at[j] = 0;
+ }
+
+ // Y(n, 0.0) = -Inf, when n >= 0
+ for (int j{1}; j <= n2 - n1 + 1; ++j) {
+ at[0] = j;
+ *result.Element<CppTypeFor<CAT, KIND>>(at) =
+ -std::numeric_limits<CppTypeFor<CAT, KIND>>::infinity();
+ }
+}
+
+static inline RT_API_ATTRS void CheckConformabilityForShallowCopy(
+ const Descriptor &d1, const Descriptor &d2, Terminator &terminator,
+ const char *funcName, const char *d1Name, const char *d2Name) {
+ if (d1.rank() != d2.rank()) {
+ terminator.Crash(
+ "Incompatible arguments to %s: %s has rank %d, %s has rank %d",
+ funcName, d1Name, d1.rank(), d1Name, d2.rank());
+ }
+
+ // Check that the shapes conform.
+ CheckConformability(d1, d2, terminator, funcName, d1Name, d2Name);
+
+ if (d1.ElementBytes() != d2.ElementBytes()) {
+ terminator.Crash("Incompatible arguments to %s: %s has element byte length "
+ "%zd, %s has length %zd",
+ funcName, d1Name, d1.ElementBytes(), d2Name, d2.ElementBytes());
+ }
+ if (d1.type() != d2.type()) {
+ terminator.Crash("Incompatible arguments to %s: %s has type code %d, %s "
+ "has type code %d",
+ funcName, d1Name, d1.type().raw(), d2Name, d2.type().raw());
+ }
+ const DescriptorAddendum *d1Addendum{d1.Addendum()};
+ const typeInfo::DerivedType *d1Derived{
+ d1Addendum ? d1Addendum->derivedType() : nullptr};
+ const DescriptorAddendum *d2Addendum{d2.Addendum()};
+ const typeInfo::DerivedType *d2Derived{
+ d2Addendum ? d2Addendum->derivedType() : nullptr};
+ if (d1Derived != d2Derived) {
+ terminator.Crash(
+ "Incompatible arguments to %s: %s and %s have different derived types",
+ funcName, d1Name, d2Name);
+ }
+ if (d2Derived) {
+ // Compare LEN parameters.
+ std::size_t lenParms{d2Derived->LenParameters()};
+ for (std::size_t j{0}; j < lenParms; ++j) {
+ if (d1Addendum->LenParameterValue(j) !=
+ d2Addendum->LenParameterValue(j)) {
+ terminator.Crash("Incompatible arguments to %s: type length parameter "
+ "%zd for %s is %zd, for %s is %zd",
+ funcName, j, d1Name,
+ static_cast<std::size_t>(d1Addendum->LenParameterValue(j)), d2Name,
+ static_cast<std::size_t>(d2Addendum->LenParameterValue(j)));
+ }
+ }
+ }
+}
+
+template <bool IS_ALLOCATING>
+static inline RT_API_ATTRS void DoShallowCopy(
+ std::conditional_t<IS_ALLOCATING, Descriptor, const Descriptor> &result,
+ const Descriptor &source, Terminator &terminator, const char *funcName) {
+ if constexpr (IS_ALLOCATING) {
+ SubscriptValue extent[maxRank];
+ source.GetShape(extent);
+ AllocateResult(result, source, source.rank(), extent, terminator, funcName);
+ } else {
+ CheckConformabilityForShallowCopy(
+ result, source, terminator, funcName, "RESULT=", "SOURCE=");
+ }
+
+ ShallowCopy(result, source);
+}
+
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+// BESSEL_JN
+// TODO: REAL(2 & 3)
+void RTDEF(BesselJn_4)(Descriptor &result, int32_t n1, int32_t n2,
+ CppTypeFor<TypeCategory::Real, 4> x, CppTypeFor<TypeCategory::Real, 4> bn2,
+ CppTypeFor<TypeCategory::Real, 4> bn2_1, const char *sourceFile, int line) {
+ DoBesselJn<TypeCategory::Real, 4>(
+ result, n1, n2, x, bn2, bn2_1, sourceFile, line);
+}
+
+void RTDEF(BesselJn_8)(Descriptor &result, int32_t n1, int32_t n2,
+ CppTypeFor<TypeCategory::Real, 8> x, CppTypeFor<TypeCategory::Real, 8> bn2,
+ CppTypeFor<TypeCategory::Real, 8> bn2_1, const char *sourceFile, int line) {
+ DoBesselJn<TypeCategory::Real, 8>(
+ result, n1, n2, x, bn2, bn2_1, sourceFile, line);
+}
+
+#if HAS_FLOAT80
+void RTDEF(BesselJn_10)(Descriptor &result, int32_t n1, int32_t n2,
+ CppTypeFor<TypeCategory::Real, 10> x,
+ CppTypeFor<TypeCategory::Real, 10> bn2,
+ CppTypeFor<TypeCategory::Real, 10> bn2_1, const char *sourceFile,
+ int line) {
+ DoBesselJn<TypeCategory::Real, 10>(
+ result, n1, n2, x, bn2, bn2_1, sourceFile, line);
+}
+#endif
+
+#if HAS_LDBL128 || HAS_FLOAT128
+void RTDEF(BesselJn_16)(Descriptor &result, int32_t n1, int32_t n2,
+ CppTypeFor<TypeCategory::Real, 16> x,
+ CppTypeFor<TypeCategory::Real, 16> bn2,
+ CppTypeFor<TypeCategory::Real, 16> bn2_1, const char *sourceFile,
+ int line) {
+ DoBesselJn<TypeCategory::Real, 16>(
+ result, n1, n2, x, bn2, bn2_1, sourceFile, line);
+}
+#endif
+
+// TODO: REAL(2 & 3)
+void RTDEF(BesselJnX0_4)(Descriptor &result, int32_t n1, int32_t n2,
+ const char *sourceFile, int line) {
+ DoBesselJnX0<TypeCategory::Real, 4>(result, n1, n2, sourceFile, line);
+}
+
+void RTDEF(BesselJnX0_8)(Descriptor &result, int32_t n1, int32_t n2,
+ const char *sourceFile, int line) {
+ DoBesselJnX0<TypeCategory::Real, 8>(result, n1, n2, sourceFile, line);
+}
+
+#if HAS_FLOAT80
+void RTDEF(BesselJnX0_10)(Descriptor &result, int32_t n1, int32_t n2,
+ const char *sourceFile, int line) {
+ DoBesselJnX0<TypeCategory::Real, 10>(result, n1, n2, sourceFile, line);
+}
+#endif
+
+#if HAS_LDBL128 || HAS_FLOAT128
+void RTDEF(BesselJnX0_16)(Descriptor &result, int32_t n1, int32_t n2,
+ const char *sourceFile, int line) {
+ DoBesselJnX0<TypeCategory::Real, 16>(result, n1, n2, sourceFile, line);
+}
+#endif
+
+// BESSEL_YN
+// TODO: REAL(2 & 3)
+void RTDEF(BesselYn_4)(Descriptor &result, int32_t n1, int32_t n2,
+ CppTypeFor<TypeCategory::Real, 4> x, CppTypeFor<TypeCategory::Real, 4> bn1,
+ CppTypeFor<TypeCategory::Real, 4> bn1_1, const char *sourceFile, int line) {
+ DoBesselYn<TypeCategory::Real, 4>(
+ result, n1, n2, x, bn1, bn1_1, sourceFile, line);
+}
+
+void RTDEF(BesselYn_8)(Descriptor &result, int32_t n1, int32_t n2,
+ CppTypeFor<TypeCategory::Real, 8> x, CppTypeFor<TypeCategory::Real, 8> bn1,
+ CppTypeFor<TypeCategory::Real, 8> bn1_1, const char *sourceFile, int line) {
+ DoBesselYn<TypeCategory::Real, 8>(
+ result, n1, n2, x, bn1, bn1_1, sourceFile, line);
+}
+
+#if HAS_FLOAT80
+void RTDEF(BesselYn_10)(Descriptor &result, int32_t n1, int32_t n2,
+ CppTypeFor<TypeCategory::Real, 10> x,
+ CppTypeFor<TypeCategory::Real, 10> bn1,
+ CppTypeFor<TypeCategory::Real, 10> bn1_1, const char *sourceFile,
+ int line) {
+ DoBesselYn<TypeCategory::Real, 10>(
+ result, n1, n2, x, bn1, bn1_1, sourceFile, line);
+}
+#endif
+
+#if HAS_LDBL128 || HAS_FLOAT128
+void RTDEF(BesselYn_16)(Descriptor &result, int32_t n1, int32_t n2,
+ CppTypeFor<TypeCategory::Real, 16> x,
+ CppTypeFor<TypeCategory::Real, 16> bn1,
+ CppTypeFor<TypeCategory::Real, 16> bn1_1, const char *sourceFile,
+ int line) {
+ DoBesselYn<TypeCategory::Real, 16>(
+ result, n1, n2, x, bn1, bn1_1, sourceFile, line);
+}
+#endif
+
+// TODO: REAL(2 & 3)
+void RTDEF(BesselYnX0_4)(Descriptor &result, int32_t n1, int32_t n2,
+ const char *sourceFile, int line) {
+ DoBesselYnX0<TypeCategory::Real, 4>(result, n1, n2, sourceFile, line);
+}
+
+void RTDEF(BesselYnX0_8)(Descriptor &result, int32_t n1, int32_t n2,
+ const char *sourceFile, int line) {
+ DoBesselYnX0<TypeCategory::Real, 8>(result, n1, n2, sourceFile, line);
+}
+
+#if HAS_FLOAT80
+void RTDEF(BesselYnX0_10)(Descriptor &result, int32_t n1, int32_t n2,
+ const char *sourceFile, int line) {
+ DoBesselYnX0<TypeCategory::Real, 10>(result, n1, n2, sourceFile, line);
+}
+#endif
+
+#if HAS_LDBL128 || HAS_FLOAT128
+void RTDEF(BesselYnX0_16)(Descriptor &result, int32_t n1, int32_t n2,
+ const char *sourceFile, int line) {
+ DoBesselYnX0<TypeCategory::Real, 16>(result, n1, n2, sourceFile, line);
+}
+#endif
+
+// CSHIFT where rank of ARRAY argument > 1
+void RTDEF(Cshift)(Descriptor &result, const Descriptor &source,
+ const Descriptor &shift, int dim, const char *sourceFile, int line) {
+ Terminator terminator{sourceFile, line};
+ int rank{source.rank()};
+ RUNTIME_CHECK(terminator, rank > 1);
+ if (dim < 1 || dim > rank) {
+ terminator.Crash(
+ "CSHIFT: DIM=%d must be >= 1 and <= ARRAY= rank %d", dim, rank);
+ }
+ ShiftControl shiftControl{shift, terminator, dim};
+ shiftControl.Init(source, "CSHIFT");
+ SubscriptValue extent[maxRank];
+ source.GetShape(extent);
+ AllocateResult(result, source, rank, extent, terminator, "CSHIFT");
+ SubscriptValue resultAt[maxRank];
+ for (int j{0}; j < rank; ++j) {
+ resultAt[j] = 1;
+ }
+ SubscriptValue sourceLB[maxRank];
+ source.GetLowerBounds(sourceLB);
+ SubscriptValue dimExtent{extent[dim - 1]};
+ SubscriptValue dimLB{sourceLB[dim - 1]};
+ SubscriptValue &resDim{resultAt[dim - 1]};
+ for (std::size_t n{result.Elements()}; n > 0; n -= dimExtent) {
+ SubscriptValue shiftCount{shiftControl.GetShift(resultAt)};
+ SubscriptValue sourceAt[maxRank];
+ for (int j{0}; j < rank; ++j) {
+ sourceAt[j] = sourceLB[j] + resultAt[j] - 1;
+ }
+ SubscriptValue &sourceDim{sourceAt[dim - 1]};
+ sourceDim = dimLB + shiftCount % dimExtent;
+ if (sourceDim < dimLB) {
+ sourceDim += dimExtent;
+ }
+ for (resDim = 1; resDim <= dimExtent; ++resDim) {
+ CopyElement(result, resultAt, source, sourceAt, terminator);
+ if (++sourceDim == dimLB + dimExtent) {
+ sourceDim = dimLB;
+ }
+ }
+ result.IncrementSubscripts(resultAt);
+ }
+}
+
+// CSHIFT where rank of ARRAY argument == 1
+void RTDEF(CshiftVector)(Descriptor &result, const Descriptor &source,
+ std::int64_t shift, const char *sourceFile, int line) {
+ Terminator terminator{sourceFile, line};
+ RUNTIME_CHECK(terminator, source.rank() == 1);
+ const Dimension &sourceDim{source.GetDimension(0)};
+ SubscriptValue extent{sourceDim.Extent()};
+ AllocateResult(result, source, 1, &extent, terminator, "CSHIFT");
+ SubscriptValue lb{sourceDim.LowerBound()};
+ for (SubscriptValue j{0}; j < extent; ++j) {
+ SubscriptValue resultAt{1 + j};
+ SubscriptValue sourceAt{
+ lb + static_cast<SubscriptValue>(j + shift) % extent};
+ if (sourceAt < lb) {
+ sourceAt += extent;
+ }
+ CopyElement(result, &resultAt, source, &sourceAt, terminator);
+ }
+}
+
+// EOSHIFT of rank > 1
+void RTDEF(Eoshift)(Descriptor &result, const Descriptor &source,
+ const Descriptor &shift, const Descriptor *boundary, int dim,
+ const char *sourceFile, int line) {
+ Terminator terminator{sourceFile, line};
+ SubscriptValue extent[maxRank];
+ int rank{source.GetShape(extent)};
+ RUNTIME_CHECK(terminator, rank > 1);
+ if (dim < 1 || dim > rank) {
+ terminator.Crash(
+ "EOSHIFT: DIM=%d must be >= 1 and <= ARRAY= rank %d", dim, rank);
+ }
+ std::size_t elementLen{
+ AllocateResult(result, source, rank, extent, terminator, "EOSHIFT")};
+ int boundaryRank{-1};
+ if (boundary) {
+ boundaryRank = boundary->rank();
+ RUNTIME_CHECK(terminator, boundaryRank == 0 || boundaryRank == rank - 1);
+ RUNTIME_CHECK(terminator, boundary->type() == source.type());
+ if (boundary->ElementBytes() != elementLen) {
+ terminator.Crash("EOSHIFT: BOUNDARY= has element byte length %zd, but "
+ "ARRAY= has length %zd",
+ boundary->ElementBytes(), elementLen);
+ }
+ if (boundaryRank > 0) {
+ int k{0};
+ for (int j{0}; j < rank; ++j) {
+ if (j != dim - 1) {
+ if (boundary->GetDimension(k).Extent() != extent[j]) {
+ terminator.Crash("EOSHIFT: BOUNDARY= has extent %jd on dimension "
+ "%d but must conform with extent %jd of ARRAY=",
+ static_cast<std::intmax_t>(boundary->GetDimension(k).Extent()),
+ k + 1, static_cast<std::intmax_t>(extent[j]));
+ }
+ ++k;
+ }
+ }
+ }
+ }
+ ShiftControl shiftControl{shift, terminator, dim};
+ shiftControl.Init(source, "EOSHIFT");
+ SubscriptValue resultAt[maxRank];
+ for (int j{0}; j < rank; ++j) {
+ resultAt[j] = 1;
+ }
+ if (!boundary) {
+ DefaultInitialize(result, terminator);
+ }
+ SubscriptValue sourceLB[maxRank];
+ source.GetLowerBounds(sourceLB);
+ SubscriptValue boundaryAt[maxRank];
+ if (boundaryRank > 0) {
+ boundary->GetLowerBounds(boundaryAt);
+ }
+ SubscriptValue dimExtent{extent[dim - 1]};
+ SubscriptValue dimLB{sourceLB[dim - 1]};
+ SubscriptValue &resDim{resultAt[dim - 1]};
+ for (std::size_t n{result.Elements()}; n > 0; n -= dimExtent) {
+ SubscriptValue shiftCount{shiftControl.GetShift(resultAt)};
+ SubscriptValue sourceAt[maxRank];
+ for (int j{0}; j < rank; ++j) {
+ sourceAt[j] = sourceLB[j] + resultAt[j] - 1;
+ }
+ SubscriptValue &sourceDim{sourceAt[dim - 1]};
+ sourceDim = dimLB + shiftCount;
+ for (resDim = 1; resDim <= dimExtent; ++resDim) {
+ if (sourceDim >= dimLB && sourceDim < dimLB + dimExtent) {
+ CopyElement(result, resultAt, source, sourceAt, terminator);
+ } else if (boundary) {
+ CopyElement(result, resultAt, *boundary, boundaryAt, terminator);
+ }
+ ++sourceDim;
+ }
+ result.IncrementSubscripts(resultAt);
+ if (boundaryRank > 0) {
+ boundary->IncrementSubscripts(boundaryAt);
+ }
+ }
+}
+
+// EOSHIFT of vector
+void RTDEF(EoshiftVector)(Descriptor &result, const Descriptor &source,
+ std::int64_t shift, const Descriptor *boundary, const char *sourceFile,
+ int line) {
+ Terminator terminator{sourceFile, line};
+ RUNTIME_CHECK(terminator, source.rank() == 1);
+ SubscriptValue extent{source.GetDimension(0).Extent()};
+ std::size_t elementLen{
+ AllocateResult(result, source, 1, &extent, terminator, "EOSHIFT")};
+ if (boundary) {
+ RUNTIME_CHECK(terminator, boundary->rank() == 0);
+ RUNTIME_CHECK(terminator, boundary->type() == source.type());
+ if (boundary->ElementBytes() != elementLen) {
+ terminator.Crash("EOSHIFT: BOUNDARY= has element byte length %zd but "
+ "ARRAY= has length %zd",
+ boundary->ElementBytes(), elementLen);
+ }
+ }
+ if (!boundary) {
+ DefaultInitialize(result, terminator);
+ }
+ SubscriptValue lb{source.GetDimension(0).LowerBound()};
+ for (SubscriptValue j{1}; j <= extent; ++j) {
+ SubscriptValue sourceAt{lb + j - 1 + static_cast<SubscriptValue>(shift)};
+ if (sourceAt >= lb && sourceAt < lb + extent) {
+ CopyElement(result, &j, source, &sourceAt, terminator);
+ } else if (boundary) {
+ CopyElement(result, &j, *boundary, 0, terminator);
+ }
+ }
+}
+
+// PACK
+void RTDEF(Pack)(Descriptor &result, const Descriptor &source,
+ const Descriptor &mask, const Descriptor *vector, const char *sourceFile,
+ int line) {
+ Terminator terminator{sourceFile, line};
+ CheckConformability(source, mask, terminator, "PACK", "ARRAY=", "MASK=");
+ auto maskType{mask.type().GetCategoryAndKind()};
+ RUNTIME_CHECK(
+ terminator, maskType && maskType->first == TypeCategory::Logical);
+ SubscriptValue trues{0};
+ if (mask.rank() == 0) {
+ if (IsLogicalElementTrue(mask, nullptr)) {
+ trues = source.Elements();
+ }
+ } else {
+ SubscriptValue maskAt[maxRank];
+ mask.GetLowerBounds(maskAt);
+ for (std::size_t n{mask.Elements()}; n > 0; --n) {
+ if (IsLogicalElementTrue(mask, maskAt)) {
+ ++trues;
+ }
+ mask.IncrementSubscripts(maskAt);
+ }
+ }
+ SubscriptValue extent{trues};
+ if (vector) {
+ RUNTIME_CHECK(terminator, vector->rank() == 1);
+ RUNTIME_CHECK(terminator, source.type() == vector->type());
+ if (source.ElementBytes() != vector->ElementBytes()) {
+ terminator.Crash("PACK: ARRAY= has element byte length %zd, but VECTOR= "
+ "has length %zd",
+ source.ElementBytes(), vector->ElementBytes());
+ }
+ extent = vector->GetDimension(0).Extent();
+ if (extent < trues) {
+ terminator.Crash("PACK: VECTOR= has extent %jd but there are %jd MASK= "
+ "elements that are .TRUE.",
+ static_cast<std::intmax_t>(extent),
+ static_cast<std::intmax_t>(trues));
+ }
+ }
+ AllocateResult(result, source, 1, &extent, terminator, "PACK");
+ SubscriptValue sourceAt[maxRank], resultAt{1};
+ source.GetLowerBounds(sourceAt);
+ if (mask.rank() == 0) {
+ if (IsLogicalElementTrue(mask, nullptr)) {
+ for (SubscriptValue n{trues}; n > 0; --n) {
+ CopyElement(result, &resultAt, source, sourceAt, terminator);
+ ++resultAt;
+ source.IncrementSubscripts(sourceAt);
+ }
+ }
+ } else {
+ SubscriptValue maskAt[maxRank];
+ mask.GetLowerBounds(maskAt);
+ for (std::size_t n{source.Elements()}; n > 0; --n) {
+ if (IsLogicalElementTrue(mask, maskAt)) {
+ CopyElement(result, &resultAt, source, sourceAt, terminator);
+ ++resultAt;
+ }
+ source.IncrementSubscripts(sourceAt);
+ mask.IncrementSubscripts(maskAt);
+ }
+ }
+ if (vector) {
+ SubscriptValue vectorAt{
+ vector->GetDimension(0).LowerBound() + resultAt - 1};
+ for (; resultAt <= extent; ++resultAt, ++vectorAt) {
+ CopyElement(result, &resultAt, *vector, &vectorAt, terminator);
+ }
+ }
+}
+
+// RESHAPE
+// F2018 16.9.163
+void RTDEF(Reshape)(Descriptor &result, const Descriptor &source,
+ const Descriptor &shape, const Descriptor *pad, const Descriptor *order,
+ const char *sourceFile, int line) {
+ // Compute and check the rank of the result.
+ Terminator terminator{sourceFile, line};
+ RUNTIME_CHECK(terminator, shape.rank() == 1);
+ RUNTIME_CHECK(terminator, shape.type().IsInteger());
+ SubscriptValue resultRank{shape.GetDimension(0).Extent()};
+ if (resultRank < 0 || resultRank > static_cast<SubscriptValue>(maxRank)) {
+ terminator.Crash(
+ "RESHAPE: SHAPE= vector length %jd implies a bad result rank",
+ static_cast<std::intmax_t>(resultRank));
+ }
+
+ // Extract and check the shape of the result; compute its element count.
+ SubscriptValue resultExtent[maxRank];
+ std::size_t shapeElementBytes{shape.ElementBytes()};
+ std::size_t resultElements{1};
+ SubscriptValue shapeSubscript{shape.GetDimension(0).LowerBound()};
+ for (int j{0}; j < resultRank; ++j, ++shapeSubscript) {
+ auto extent{GetInt64Safe(
+ shape.Element<char>(&shapeSubscript), shapeElementBytes, terminator)};
+ if (!extent) {
+ terminator.Crash("RESHAPE: value of SHAPE(%d) exceeds 64 bits", j + 1);
+ } else if (*extent < 0) {
+ terminator.Crash("RESHAPE: bad value for SHAPE(%d)=%jd", j + 1,
+ static_cast<std::intmax_t>(*extent));
+ }
+ resultExtent[j] = *extent;
+ resultElements *= resultExtent[j];
+ }
+
+ // Check that there are sufficient elements in the SOURCE=, or that
+ // the optional PAD= argument is present and nonempty.
+ std::size_t elementBytes{source.ElementBytes()};
+ std::size_t sourceElements{source.Elements()};
+ std::size_t padElements{pad ? pad->Elements() : 0};
+ if (resultElements > sourceElements) {
+ if (padElements <= 0) {
+ terminator.Crash(
+ "RESHAPE: not enough elements, need %zd but only have %zd",
+ resultElements, sourceElements);
+ }
+ if (pad->ElementBytes() != elementBytes) {
+ terminator.Crash("RESHAPE: PAD= has element byte length %zd but SOURCE= "
+ "has length %zd",
+ pad->ElementBytes(), elementBytes);
+ }
+ }
+
+ // Extract and check the optional ORDER= argument, which must be a
+ // permutation of [1..resultRank].
+ int dimOrder[maxRank];
+ if (order) {
+ RUNTIME_CHECK(terminator, order->rank() == 1);
+ RUNTIME_CHECK(terminator, order->type().IsInteger());
+ if (order->GetDimension(0).Extent() != resultRank) {
+ terminator.Crash("RESHAPE: the extent of ORDER (%jd) must match the rank"
+ " of the SHAPE (%d)",
+ static_cast<std::intmax_t>(order->GetDimension(0).Extent()),
+ resultRank);
+ }
+ std::uint64_t values{0};
+ SubscriptValue orderSubscript{order->GetDimension(0).LowerBound()};
+ std::size_t orderElementBytes{order->ElementBytes()};
+ for (SubscriptValue j{0}; j < resultRank; ++j, ++orderSubscript) {
+ auto k{GetInt64Safe(order->Element<char>(&orderSubscript),
+ orderElementBytes, terminator)};
+ if (!k) {
+ terminator.Crash("RESHAPE: ORDER element value exceeds 64 bits");
+ } else if (*k < 1 || *k > resultRank || ((values >> *k) & 1)) {
+ terminator.Crash("RESHAPE: bad value for ORDER element (%jd)",
+ static_cast<std::intmax_t>(*k));
+ }
+ values |= std::uint64_t{1} << *k;
+ dimOrder[j] = *k - 1;
+ }
+ } else {
+ for (int j{0}; j < resultRank; ++j) {
+ dimOrder[j] = j;
+ }
+ }
+
+ // Allocate result descriptor
+ AllocateResult(
+ result, source, resultRank, resultExtent, terminator, "RESHAPE");
+
+ // Populate the result's elements.
+ SubscriptValue resultSubscript[maxRank];
+ result.GetLowerBounds(resultSubscript);
+ SubscriptValue sourceSubscript[maxRank];
+ source.GetLowerBounds(sourceSubscript);
+ std::size_t resultElement{0};
+ std::size_t elementsFromSource{std::min(resultElements, sourceElements)};
+ for (; resultElement < elementsFromSource; ++resultElement) {
+ CopyElement(result, resultSubscript, source, sourceSubscript, terminator);
+ source.IncrementSubscripts(sourceSubscript);
+ result.IncrementSubscripts(resultSubscript, dimOrder);
+ }
+ if (resultElement < resultElements) {
+ // Remaining elements come from the optional PAD= argument.
+ SubscriptValue padSubscript[maxRank];
+ pad->GetLowerBounds(padSubscript);
+ for (; resultElement < resultElements; ++resultElement) {
+ CopyElement(result, resultSubscript, *pad, padSubscript, terminator);
+ pad->IncrementSubscripts(padSubscript);
+ result.IncrementSubscripts(resultSubscript, dimOrder);
+ }
+ }
+}
+
+// ShallowCopy
+void RTDEF(ShallowCopy)(Descriptor &result, const Descriptor &source,
+ const char *sourceFile, int line) {
+ Terminator terminator{sourceFile, line};
+ DoShallowCopy<true>(result, source, terminator, "ShallowCopy");
+}
+
+void RTDEF(ShallowCopyDirect)(const Descriptor &result,
+ const Descriptor &source, const char *sourceFile, int line) {
+ Terminator terminator{sourceFile, line};
+ DoShallowCopy<false>(result, source, terminator, "ShallowCopyDirect");
+}
+
+// SPREAD
+void RTDEF(Spread)(Descriptor &result, const Descriptor &source, int dim,
+ std::int64_t ncopies, const char *sourceFile, int line) {
+ Terminator terminator{sourceFile, line};
+ int rank{source.rank() + 1};
+ RUNTIME_CHECK(terminator, rank <= maxRank);
+ if (dim < 1 || dim > rank) {
+ terminator.Crash("SPREAD: DIM=%d argument for rank-%d source array "
+ "must be greater than 1 and less than or equal to %d",
+ dim, rank - 1, rank);
+ }
+ ncopies = std::max<std::int64_t>(ncopies, 0);
+ SubscriptValue extent[maxRank];
+ int k{0};
+ for (int j{0}; j < rank; ++j) {
+ extent[j] = j == dim - 1 ? ncopies : source.GetDimension(k++).Extent();
+ }
+ AllocateResult(result, source, rank, extent, terminator, "SPREAD");
+ SubscriptValue resultAt[maxRank];
+ for (int j{0}; j < rank; ++j) {
+ resultAt[j] = 1;
+ }
+ SubscriptValue &resultDim{resultAt[dim - 1]};
+ SubscriptValue sourceAt[maxRank];
+ source.GetLowerBounds(sourceAt);
+ for (std::size_t n{result.Elements()}; n > 0; n -= ncopies) {
+ for (resultDim = 1; resultDim <= ncopies; ++resultDim) {
+ CopyElement(result, resultAt, source, sourceAt, terminator);
+ }
+ result.IncrementSubscripts(resultAt);
+ source.IncrementSubscripts(sourceAt);
+ }
+}
+
+// TRANSPOSE
+void RTDEF(Transpose)(Descriptor &result, const Descriptor &matrix,
+ const char *sourceFile, int line) {
+ Terminator terminator{sourceFile, line};
+ RUNTIME_CHECK(terminator, matrix.rank() == 2);
+ SubscriptValue extent[2]{
+ matrix.GetDimension(1).Extent(), matrix.GetDimension(0).Extent()};
+ AllocateResult(result, matrix, 2, extent, terminator, "TRANSPOSE");
+ SubscriptValue resultAt[2]{1, 1};
+ SubscriptValue matrixLB[2];
+ matrix.GetLowerBounds(matrixLB);
+ for (std::size_t n{result.Elements()}; n-- > 0;
+ result.IncrementSubscripts(resultAt)) {
+ SubscriptValue matrixAt[2]{
+ matrixLB[0] + resultAt[1] - 1, matrixLB[1] + resultAt[0] - 1};
+ CopyElement(result, resultAt, matrix, matrixAt, terminator);
+ }
+}
+
+// UNPACK
+void RTDEF(Unpack)(Descriptor &result, const Descriptor &vector,
+ const Descriptor &mask, const Descriptor &field, const char *sourceFile,
+ int line) {
+ Terminator terminator{sourceFile, line};
+ RUNTIME_CHECK(terminator, vector.rank() == 1);
+ int rank{mask.rank()};
+ RUNTIME_CHECK(terminator, rank > 0);
+ SubscriptValue extent[maxRank];
+ mask.GetShape(extent);
+ CheckConformability(mask, field, terminator, "UNPACK", "MASK=", "FIELD=");
+ std::size_t elementLen{
+ AllocateResult(result, field, rank, extent, terminator, "UNPACK")};
+ RUNTIME_CHECK(terminator, vector.type() == field.type());
+ if (vector.ElementBytes() != elementLen) {
+ terminator.Crash(
+ "UNPACK: VECTOR= has element byte length %zd but FIELD= has length %zd",
+ vector.ElementBytes(), elementLen);
+ }
+ SubscriptValue resultAt[maxRank], maskAt[maxRank], fieldAt[maxRank],
+ vectorAt{vector.GetDimension(0).LowerBound()};
+ for (int j{0}; j < rank; ++j) {
+ resultAt[j] = 1;
+ }
+ mask.GetLowerBounds(maskAt);
+ field.GetLowerBounds(fieldAt);
+ SubscriptValue vectorElements{vector.GetDimension(0).Extent()};
+ SubscriptValue vectorLeft{vectorElements};
+ for (std::size_t n{result.Elements()}; n-- > 0;) {
+ if (IsLogicalElementTrue(mask, maskAt)) {
+ if (vectorLeft-- == 0) {
+ terminator.Crash(
+ "UNPACK: VECTOR= argument has fewer elements (%d) than "
+ "MASK= has .TRUE. entries",
+ vectorElements);
+ }
+ CopyElement(result, resultAt, vector, &vectorAt, terminator);
+ ++vectorAt;
+ } else {
+ CopyElement(result, resultAt, field, fieldAt, terminator);
+ }
+ result.IncrementSubscripts(resultAt);
+ mask.IncrementSubscripts(maskAt);
+ field.IncrementSubscripts(fieldAt);
+ }
+}
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/type-code.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/type-code.cpp
new file mode 100644
index 00000000000..8cfec9a4ec2
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/type-code.cpp
@@ -0,0 +1,242 @@
+//===-- lib/runtime/type-code.cpp -------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang-rt/runtime/type-code.h"
+
+namespace Fortran::runtime {
+
+RT_OFFLOAD_API_GROUP_BEGIN
+
+RT_API_ATTRS TypeCode::TypeCode(TypeCategory f, int kind) {
+ switch (f) {
+ case TypeCategory::Integer:
+ switch (kind) {
+ case 1:
+ raw_ = CFI_type_int8_t;
+ break;
+ case 2:
+ raw_ = CFI_type_int16_t;
+ break;
+ case 4:
+ raw_ = CFI_type_int32_t;
+ break;
+ case 8:
+ raw_ = CFI_type_int64_t;
+ break;
+ case 16:
+ raw_ = CFI_type_int128_t;
+ break;
+ }
+ break;
+ case TypeCategory::Unsigned:
+ switch (kind) {
+ case 1:
+ raw_ = CFI_type_uint8_t;
+ break;
+ case 2:
+ raw_ = CFI_type_uint16_t;
+ break;
+ case 4:
+ raw_ = CFI_type_uint32_t;
+ break;
+ case 8:
+ raw_ = CFI_type_uint64_t;
+ break;
+ case 16:
+ raw_ = CFI_type_uint128_t;
+ break;
+ }
+ break;
+ case TypeCategory::Real:
+ switch (kind) {
+ case 2:
+ raw_ = CFI_type_half_float;
+ break;
+ case 3:
+ raw_ = CFI_type_bfloat;
+ break;
+ case 4:
+ raw_ = CFI_type_float;
+ break;
+ case 8:
+ raw_ = CFI_type_double;
+ break;
+ case 10:
+ raw_ = CFI_type_extended_double;
+ break;
+ case 16:
+ raw_ = CFI_type_float128;
+ break;
+ }
+ break;
+ case TypeCategory::Complex:
+ switch (kind) {
+ case 2:
+ raw_ = CFI_type_half_float_Complex;
+ break;
+ case 3:
+ raw_ = CFI_type_bfloat_Complex;
+ break;
+ case 4:
+ raw_ = CFI_type_float_Complex;
+ break;
+ case 8:
+ raw_ = CFI_type_double_Complex;
+ break;
+ case 10:
+ raw_ = CFI_type_extended_double_Complex;
+ break;
+ case 16:
+ raw_ = CFI_type_long_double_Complex;
+ break;
+ }
+ break;
+ case TypeCategory::Character:
+ switch (kind) {
+ case 1:
+ raw_ = CFI_type_char;
+ break;
+ case 2:
+ raw_ = CFI_type_char16_t;
+ break;
+ case 4:
+ raw_ = CFI_type_char32_t;
+ break;
+ }
+ break;
+ case TypeCategory::Logical:
+ switch (kind) {
+ case 1:
+ raw_ = CFI_type_Bool;
+ break;
+ case 2:
+ raw_ = CFI_type_int_least16_t;
+ break;
+ case 4:
+ raw_ = CFI_type_int_least32_t;
+ break;
+ case 8:
+ raw_ = CFI_type_int_least64_t;
+ break;
+ }
+ break;
+ case TypeCategory::Derived:
+ raw_ = CFI_type_struct;
+ break;
+ }
+}
+
+RT_API_ATTRS Fortran::common::optional<std::pair<TypeCategory, int>>
+TypeCode::GetCategoryAndKind() const {
+ switch (raw_) {
+ case CFI_type_signed_char:
+ return std::make_pair(TypeCategory::Character, sizeof(signed char));
+ case CFI_type_short:
+ return std::make_pair(TypeCategory::Integer, sizeof(short));
+ case CFI_type_int:
+ return std::make_pair(TypeCategory::Integer, sizeof(int));
+ case CFI_type_long:
+ return std::make_pair(TypeCategory::Integer, sizeof(long));
+ case CFI_type_long_long:
+ return std::make_pair(TypeCategory::Integer, sizeof(long long));
+ case CFI_type_size_t:
+ return std::make_pair(TypeCategory::Integer, sizeof(std::size_t));
+ case CFI_type_int8_t:
+ return std::make_pair(TypeCategory::Integer, 1);
+ case CFI_type_int16_t:
+ return std::make_pair(TypeCategory::Integer, 2);
+ case CFI_type_int32_t:
+ return std::make_pair(TypeCategory::Integer, 4);
+ case CFI_type_int64_t:
+ return std::make_pair(TypeCategory::Integer, 8);
+ case CFI_type_int128_t:
+ return std::make_pair(TypeCategory::Integer, 16);
+ case CFI_type_int_least8_t:
+ return std::make_pair(TypeCategory::Logical, 1);
+ case CFI_type_int_least16_t:
+ return std::make_pair(TypeCategory::Logical, 2);
+ case CFI_type_int_least32_t:
+ return std::make_pair(TypeCategory::Logical, 4);
+ case CFI_type_int_least64_t:
+ return std::make_pair(TypeCategory::Logical, 8);
+ case CFI_type_int_least128_t:
+ return std::make_pair(TypeCategory::Integer, 16);
+ case CFI_type_int_fast8_t:
+ return std::make_pair(TypeCategory::Integer, sizeof(std::int_fast8_t));
+ case CFI_type_int_fast16_t:
+ return std::make_pair(TypeCategory::Integer, sizeof(std::int_fast16_t));
+ case CFI_type_int_fast32_t:
+ return std::make_pair(TypeCategory::Integer, sizeof(std::int_fast32_t));
+ case CFI_type_int_fast64_t:
+ return std::make_pair(TypeCategory::Integer, sizeof(std::int_fast64_t));
+ case CFI_type_int_fast128_t:
+ return std::make_pair(TypeCategory::Integer, 16);
+ case CFI_type_intmax_t:
+ return std::make_pair(TypeCategory::Integer, sizeof(std::intmax_t));
+ case CFI_type_intptr_t:
+ return std::make_pair(TypeCategory::Integer, sizeof(std::intptr_t));
+ case CFI_type_ptrdiff_t:
+ return std::make_pair(TypeCategory::Integer, sizeof(std::ptrdiff_t));
+ case CFI_type_half_float:
+ return std::make_pair(TypeCategory::Real, 2);
+ case CFI_type_bfloat:
+ return std::make_pair(TypeCategory::Real, 3);
+ case CFI_type_float:
+ return std::make_pair(TypeCategory::Real, 4);
+ case CFI_type_double:
+ return std::make_pair(TypeCategory::Real, 8);
+ case CFI_type_extended_double:
+ return std::make_pair(TypeCategory::Real, 10);
+ case CFI_type_long_double:
+ return std::make_pair(TypeCategory::Real, 16);
+ case CFI_type_float128:
+ return std::make_pair(TypeCategory::Real, 16);
+ case CFI_type_half_float_Complex:
+ return std::make_pair(TypeCategory::Complex, 2);
+ case CFI_type_bfloat_Complex:
+ return std::make_pair(TypeCategory::Complex, 3);
+ case CFI_type_float_Complex:
+ return std::make_pair(TypeCategory::Complex, 4);
+ case CFI_type_double_Complex:
+ return std::make_pair(TypeCategory::Complex, 8);
+ case CFI_type_extended_double_Complex:
+ return std::make_pair(TypeCategory::Complex, 10);
+ case CFI_type_long_double_Complex:
+ return std::make_pair(TypeCategory::Complex, 16);
+ case CFI_type_float128_Complex:
+ return std::make_pair(TypeCategory::Complex, 16);
+ case CFI_type_Bool:
+ return std::make_pair(TypeCategory::Logical, 1);
+ case CFI_type_char:
+ return std::make_pair(TypeCategory::Character, 1);
+ case CFI_type_cptr:
+ return std::make_pair(TypeCategory::Integer, sizeof(void *));
+ case CFI_type_struct:
+ return std::make_pair(TypeCategory::Derived, 0);
+ case CFI_type_char16_t:
+ return std::make_pair(TypeCategory::Character, 2);
+ case CFI_type_char32_t:
+ return std::make_pair(TypeCategory::Character, 4);
+ case CFI_type_uint8_t:
+ return std::make_pair(TypeCategory::Unsigned, 1);
+ case CFI_type_uint16_t:
+ return std::make_pair(TypeCategory::Unsigned, 2);
+ case CFI_type_uint32_t:
+ return std::make_pair(TypeCategory::Unsigned, 4);
+ case CFI_type_uint64_t:
+ return std::make_pair(TypeCategory::Unsigned, 8);
+ case CFI_type_uint128_t:
+ return std::make_pair(TypeCategory::Unsigned, 16);
+ default:
+ return Fortran::common::nullopt;
+ }
+}
+
+RT_OFFLOAD_API_GROUP_END
+
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/type-info.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/type-info.cpp
new file mode 100644
index 00000000000..3e1d7c9c3c7
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/type-info.cpp
@@ -0,0 +1,338 @@
+//===-- lib/runtime/type-info.cpp -------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang-rt/runtime/type-info.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang-rt/runtime/tools.h"
+#include <cstdio>
+
+namespace Fortran::runtime::typeInfo {
+
+RT_OFFLOAD_API_GROUP_BEGIN
+
+RT_API_ATTRS Fortran::common::optional<TypeParameterValue> Value::GetValue(
+ const Descriptor *descriptor) const {
+ switch (genre_) {
+ case Genre::Explicit:
+ return value_;
+ case Genre::LenParameter:
+ if (descriptor) {
+ if (const auto *addendum{descriptor->Addendum()}) {
+ return addendum->LenParameterValue(value_);
+ }
+ }
+ return Fortran::common::nullopt;
+ default:
+ return Fortran::common::nullopt;
+ }
+}
+
+RT_API_ATTRS std::size_t Component::GetElementByteSize(
+ const Descriptor &instance) const {
+ switch (category()) {
+ case TypeCategory::Integer:
+ case TypeCategory::Unsigned:
+ case TypeCategory::Real:
+ case TypeCategory::Logical:
+ return kind_;
+ case TypeCategory::Complex:
+ return 2 * kind_;
+ case TypeCategory::Character:
+ if (auto value{characterLen_.GetValue(&instance)}) {
+ return kind_ * *value;
+ }
+ break;
+ case TypeCategory::Derived:
+ if (const auto *type{derivedType()}) {
+ return type->sizeInBytes();
+ }
+ break;
+ }
+ return 0;
+}
+
+RT_API_ATTRS std::size_t Component::GetElements(
+ const Descriptor &instance) const {
+ std::size_t elements{1};
+ if (int rank{rank_}) {
+ if (const Value * boundValues{bounds()}) {
+ for (int j{0}; j < rank; ++j) {
+ TypeParameterValue lb{
+ boundValues[2 * j].GetValue(&instance).value_or(0)};
+ TypeParameterValue ub{
+ boundValues[2 * j + 1].GetValue(&instance).value_or(0)};
+ if (ub >= lb) {
+ elements *= ub - lb + 1;
+ } else {
+ return 0;
+ }
+ }
+ } else {
+ return 0;
+ }
+ }
+ return elements;
+}
+
+RT_API_ATTRS std::size_t Component::SizeInBytes(
+ const Descriptor &instance) const {
+ if (genre() == Genre::Data) {
+ return GetElementByteSize(instance) * GetElements(instance);
+ } else if (category() == TypeCategory::Derived) {
+ const DerivedType *type{derivedType()};
+ return Descriptor::SizeInBytes(
+ rank_, true, type ? type->LenParameters() : 0);
+ } else {
+ return Descriptor::SizeInBytes(rank_);
+ }
+}
+
+RT_API_ATTRS void Component::EstablishDescriptor(Descriptor &descriptor,
+ const Descriptor &container, Terminator &terminator) const {
+ ISO::CFI_attribute_t attribute{static_cast<ISO::CFI_attribute_t>(
+ genre_ == Genre::Allocatable ? CFI_attribute_allocatable
+ : genre_ == Genre::Pointer ? CFI_attribute_pointer
+ : CFI_attribute_other)};
+ TypeCategory cat{category()};
+ if (cat == TypeCategory::Character) {
+ std::size_t lengthInChars{0};
+ if (auto length{characterLen_.GetValue(&container)}) {
+ lengthInChars = static_cast<std::size_t>(*length);
+ } else {
+ RUNTIME_CHECK(
+ terminator, characterLen_.genre() == Value::Genre::Deferred);
+ }
+ descriptor.Establish(
+ kind_, lengthInChars, nullptr, rank_, nullptr, attribute);
+ } else if (cat == TypeCategory::Derived) {
+ if (const DerivedType * type{derivedType()}) {
+ descriptor.Establish(*type, nullptr, rank_, nullptr, attribute);
+ } else { // unlimited polymorphic
+ descriptor.Establish(TypeCode{TypeCategory::Derived, 0}, 0, nullptr,
+ rank_, nullptr, attribute, true);
+ }
+ } else {
+ descriptor.Establish(cat, kind_, nullptr, rank_, nullptr, attribute);
+ }
+ if (rank_ && genre_ != Genre::Allocatable && genre_ != Genre::Pointer) {
+ const typeInfo::Value *boundValues{bounds()};
+ RUNTIME_CHECK(terminator, boundValues != nullptr);
+ auto byteStride{static_cast<SubscriptValue>(descriptor.ElementBytes())};
+ for (int j{0}; j < rank_; ++j) {
+ auto lb{boundValues++->GetValue(&container)};
+ auto ub{boundValues++->GetValue(&container)};
+ RUNTIME_CHECK(terminator, lb.has_value() && ub.has_value());
+ Dimension &dim{descriptor.GetDimension(j)};
+ dim.SetBounds(*lb, *ub);
+ dim.SetByteStride(byteStride);
+ byteStride *= dim.Extent();
+ }
+ }
+}
+
+RT_API_ATTRS void Component::CreatePointerDescriptor(Descriptor &descriptor,
+ const Descriptor &container, Terminator &terminator,
+ const SubscriptValue *subscripts) const {
+ RUNTIME_CHECK(terminator, genre_ == Genre::Data);
+ EstablishDescriptor(descriptor, container, terminator);
+ std::size_t offset{static_cast<std::size_t>(offset_)};
+ if (subscripts) {
+ offset += container.SubscriptsToByteOffset(subscripts);
+ }
+ descriptor.set_base_addr(container.OffsetElement<char>() + offset);
+ descriptor.raw().attribute = CFI_attribute_pointer;
+}
+
+RT_API_ATTRS const DerivedType *DerivedType::GetParentType() const {
+ if (hasParent_) {
+ const Descriptor &compDesc{component()};
+ const Component &component{*compDesc.OffsetElement<const Component>()};
+ return component.derivedType();
+ } else {
+ return nullptr;
+ }
+}
+
+RT_API_ATTRS const Component *DerivedType::FindDataComponent(
+ const char *compName, std::size_t compNameLen) const {
+ const Descriptor &compDesc{component()};
+ std::size_t n{compDesc.Elements()};
+ SubscriptValue at[maxRank];
+ compDesc.GetLowerBounds(at);
+ for (std::size_t j{0}; j < n; ++j, compDesc.IncrementSubscripts(at)) {
+ const Component *component{compDesc.Element<Component>(at)};
+ INTERNAL_CHECK(component != nullptr);
+ const Descriptor &nameDesc{component->name()};
+ if (nameDesc.ElementBytes() == compNameLen &&
+ Fortran::runtime::memcmp(
+ compName, nameDesc.OffsetElement(), compNameLen) == 0) {
+ return component;
+ }
+ }
+ const DerivedType *parent{GetParentType()};
+ return parent ? parent->FindDataComponent(compName, compNameLen) : nullptr;
+}
+
+RT_OFFLOAD_API_GROUP_END
+
+static void DumpScalarCharacter(
+ FILE *f, const Descriptor &desc, const char *what) {
+ if (desc.raw().version == CFI_VERSION &&
+ desc.type() == TypeCode{TypeCategory::Character, 1} &&
+ desc.ElementBytes() > 0 && desc.rank() == 0 &&
+ desc.OffsetElement() != nullptr) {
+ std::fwrite(desc.OffsetElement(), desc.ElementBytes(), 1, f);
+ } else {
+ std::fprintf(f, "bad %s descriptor: ", what);
+ desc.Dump(f);
+ }
+}
+
+FILE *DerivedType::Dump(FILE *f) const {
+ std::fprintf(f, "DerivedType @ %p:\n", reinterpret_cast<const void *>(this));
+ const std::uint64_t *uints{reinterpret_cast<const std::uint64_t *>(this)};
+ for (int j{0}; j < 64; ++j) {
+ int offset{j * static_cast<int>(sizeof *uints)};
+ std::fprintf(f, " [+%3d](%p) 0x%016jx", offset,
+ reinterpret_cast<const void *>(&uints[j]),
+ static_cast<std::uintmax_t>(uints[j]));
+ if (offset == offsetof(DerivedType, binding_)) {
+ std::fputs(" <-- binding_\n", f);
+ } else if (offset == offsetof(DerivedType, name_)) {
+ std::fputs(" <-- name_\n", f);
+ } else if (offset == offsetof(DerivedType, sizeInBytes_)) {
+ std::fputs(" <-- sizeInBytes_\n", f);
+ } else if (offset == offsetof(DerivedType, uninstantiated_)) {
+ std::fputs(" <-- uninstantiated_\n", f);
+ } else if (offset == offsetof(DerivedType, kindParameter_)) {
+ std::fputs(" <-- kindParameter_\n", f);
+ } else if (offset == offsetof(DerivedType, lenParameterKind_)) {
+ std::fputs(" <-- lenParameterKind_\n", f);
+ } else if (offset == offsetof(DerivedType, component_)) {
+ std::fputs(" <-- component_\n", f);
+ } else if (offset == offsetof(DerivedType, procPtr_)) {
+ std::fputs(" <-- procPtr_\n", f);
+ } else if (offset == offsetof(DerivedType, special_)) {
+ std::fputs(" <-- special_\n", f);
+ } else if (offset == offsetof(DerivedType, specialBitSet_)) {
+ std::fputs(" <-- specialBitSet_\n", f);
+ } else if (offset == offsetof(DerivedType, hasParent_)) {
+ std::fputs(" <-- (flags)\n", f);
+ } else {
+ std::fputc('\n', f);
+ }
+ }
+ std::fputs(" name: ", f);
+ DumpScalarCharacter(f, name(), "DerivedType::name");
+ const Descriptor &bindingDesc{binding()};
+ std::fprintf(
+ f, "\n binding descriptor (byteSize 0x%zx): ", binding_.byteSize);
+ bindingDesc.Dump(f);
+ const Descriptor &compDesc{component()};
+ std::fputs("\n components:\n", f);
+ if (compDesc.raw().version == CFI_VERSION &&
+ compDesc.type() == TypeCode{TypeCategory::Derived, 0} &&
+ compDesc.ElementBytes() == sizeof(Component) && compDesc.rank() == 1) {
+ std::size_t n{compDesc.Elements()};
+ for (std::size_t j{0}; j < n; ++j) {
+ const Component &comp{*compDesc.ZeroBasedIndexedElement<Component>(j)};
+ std::fprintf(f, " [%3zd] ", j);
+ comp.Dump(f);
+ }
+ } else {
+ std::fputs(" bad descriptor: ", f);
+ compDesc.Dump(f);
+ }
+ const Descriptor &specialDesc{special()};
+ std::fprintf(
+ f, "\n special descriptor (byteSize 0x%zx): ", special_.byteSize);
+ specialDesc.Dump(f);
+ if (specialDesc.IsAllocated()) {
+ std::size_t specials{specialDesc.Elements()};
+ for (std::size_t j{0}; j < specials; ++j) {
+ std::fprintf(f, " [%3zd] ", j);
+ specialDesc.ZeroBasedIndexedElement<SpecialBinding>(j)->Dump(f);
+ }
+ }
+ return f;
+}
+
+FILE *Component::Dump(FILE *f) const {
+ std::fprintf(f, "Component @ %p:\n", reinterpret_cast<const void *>(this));
+ std::fputs(" name: ", f);
+ DumpScalarCharacter(f, name(), "Component::name");
+ if (genre_ == Genre::Data) {
+ std::fputs(" Data ", f);
+ } else if (genre_ == Genre::Pointer) {
+ std::fputs(" Pointer ", f);
+ } else if (genre_ == Genre::Allocatable) {
+ std::fputs(" Allocatable", f);
+ } else if (genre_ == Genre::Automatic) {
+ std::fputs(" Automatic ", f);
+ } else {
+ std::fprintf(f, " (bad genre 0x%x)", static_cast<int>(genre_));
+ }
+ std::fprintf(f, " category %d kind %d rank %d offset 0x%zx\n", category_,
+ kind_, rank_, static_cast<std::size_t>(offset_));
+ const auto &dtDesc{derivedType_.descriptor()};
+ if (dtDesc.raw().base_addr) {
+ std::fprintf(f, " derivedType_ %p\n", dtDesc.raw().base_addr);
+ }
+ if (initialization_) {
+ std::fprintf(f, " initialization @ %p:\n",
+ reinterpret_cast<const void *>(initialization_));
+ for (int j{0}; j < 128; j += sizeof(std::uint64_t)) {
+ std::fprintf(f, " [%3d] 0x%016jx\n", j,
+ static_cast<std::uintmax_t>(
+ *reinterpret_cast<const std::uint64_t *>(initialization_ + j)));
+ }
+ }
+ return f;
+}
+
+FILE *SpecialBinding::Dump(FILE *f) const {
+ std::fprintf(
+ f, "SpecialBinding @ %p:\n", reinterpret_cast<const void *>(this));
+ switch (which_) {
+ case Which::ScalarAssignment:
+ std::fputs(" ScalarAssignment", f);
+ break;
+ case Which::ElementalAssignment:
+ std::fputs(" ElementalAssignment", f);
+ break;
+ case Which::ReadFormatted:
+ std::fputs(" ReadFormatted", f);
+ break;
+ case Which::ReadUnformatted:
+ std::fputs(" ReadUnformatted", f);
+ break;
+ case Which::WriteFormatted:
+ std::fputs(" WriteFormatted", f);
+ break;
+ case Which::WriteUnformatted:
+ std::fputs(" WriteUnformatted", f);
+ break;
+ case Which::ElementalFinal:
+ std::fputs(" ElementalFinal", f);
+ break;
+ case Which::AssumedRankFinal:
+ std::fputs(" AssumedRankFinal", f);
+ break;
+ default:
+ std::fprintf(f, " rank-%d final:",
+ static_cast<int>(which_) - static_cast<int>(Which::ScalarFinal));
+ break;
+ }
+ std::fprintf(f, " isArgDescriptorSet: 0x%x\n", isArgDescriptorSet_);
+ std::fprintf(f, " isTypeBound: %d\n", isTypeBound_);
+ std::fprintf(f, " isArgContiguousSet: 0x%x\n", isArgContiguousSet_);
+ std::fprintf(f, " proc: %p\n", reinterpret_cast<void *>(proc_));
+ return f;
+}
+
+} // namespace Fortran::runtime::typeInfo
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/unit-map.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/unit-map.cpp
new file mode 100644
index 00000000000..41a03f3319d
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/unit-map.cpp
@@ -0,0 +1,137 @@
+//===-- lib/runtime/unit-map.cpp --------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "unit-map.h"
+#include "flang/Common/optional.h"
+
+namespace Fortran::runtime::io {
+
+void UnitMap::Initialize() {
+ if (!isInitialized_) {
+ freeNewUnits_.InitializeState();
+ // Unit number -1 is reserved.
+ // The unit numbers are pushed in reverse order so that the first
+ // ones to be popped will be small and suitable for use as kind=1
+ // integers.
+ for (int j{freeNewUnits_.maxValue}; j > 1; --j) {
+ freeNewUnits_.Add(j);
+ }
+ isInitialized_ = true;
+ }
+}
+
+// See 12.5.6.12 in Fortran 2018. NEWUNIT= unit numbers are negative,
+// and not equal to -1 (or ERROR_UNIT, if it were negative, which it isn't.)
+ExternalFileUnit &UnitMap::NewUnit(const Terminator &terminator) {
+ CriticalSection critical{lock_};
+ Initialize();
+ Fortran::common::optional<int> n{freeNewUnits_.PopValue()};
+ if (!n) {
+ n = emergencyNewUnit_++;
+ }
+ return Create(-*n, terminator);
+}
+
+ExternalFileUnit *UnitMap::LookUpForClose(int n) {
+ CriticalSection critical{lock_};
+ Chain *previous{nullptr};
+ int hash{Hash(n)};
+ for (Chain *p{bucket_[hash].get()}; p; previous = p, p = p->next.get()) {
+ if (p->unit.unitNumber() == n) {
+ if (previous) {
+ previous->next.swap(p->next);
+ } else {
+ bucket_[hash].swap(p->next);
+ }
+ // p->next.get() == p at this point; the next swap pushes p on closing_
+ closing_.swap(p->next);
+ return &p->unit;
+ }
+ }
+ return nullptr;
+}
+
+void UnitMap::DestroyClosed(ExternalFileUnit &unit) {
+ Chain *p{nullptr};
+ {
+ CriticalSection critical{lock_};
+ Chain *previous{nullptr};
+ for (p = closing_.get(); p; previous = p, p = p->next.get()) {
+ if (&p->unit == &unit) {
+ int n{unit.unitNumber()};
+ if (n <= -2) {
+ freeNewUnits_.Add(-n);
+ }
+ if (previous) {
+ previous->next.swap(p->next);
+ } else {
+ closing_.swap(p->next);
+ }
+ break;
+ }
+ }
+ }
+ if (p) {
+ p->unit.~ExternalFileUnit();
+ FreeMemory(p);
+ }
+}
+
+void UnitMap::CloseAll(IoErrorHandler &handler) {
+ // Extract units from the map so they can be closed
+ // without holding lock_.
+ OwningPtr<Chain> closeList;
+ {
+ CriticalSection critical{lock_};
+ for (int j{0}; j < buckets_; ++j) {
+ while (Chain * p{bucket_[j].get()}) {
+ bucket_[j].swap(p->next); // pops p from head of bucket list
+ closeList.swap(p->next); // pushes p to closeList
+ }
+ }
+ }
+ while (Chain * p{closeList.get()}) {
+ closeList.swap(p->next); // pops p from head of closeList
+ p->unit.CloseUnit(CloseStatus::Keep, handler);
+ p->unit.~ExternalFileUnit();
+ FreeMemory(p);
+ }
+}
+
+void UnitMap::FlushAll(IoErrorHandler &handler) {
+ CriticalSection critical{lock_};
+ for (int j{0}; j < buckets_; ++j) {
+ for (Chain *p{bucket_[j].get()}; p; p = p->next.get()) {
+ p->unit.FlushOutput(handler);
+ }
+ }
+}
+
+ExternalFileUnit *UnitMap::Find(const char *path, std::size_t pathLen) {
+ if (path) {
+ // TODO: Faster data structure
+ for (int j{0}; j < buckets_; ++j) {
+ for (Chain *p{bucket_[j].get()}; p; p = p->next.get()) {
+ if (p->unit.path() && p->unit.pathLength() == pathLen &&
+ std::memcmp(p->unit.path(), path, pathLen) == 0) {
+ return &p->unit;
+ }
+ }
+ }
+ }
+ return nullptr;
+}
+
+ExternalFileUnit &UnitMap::Create(int n, const Terminator &terminator) {
+ Chain &chain{*New<Chain>{terminator}(n).release()};
+ chain.next.reset(&chain);
+ bucket_[Hash(n)].swap(chain.next); // pushes new node as list head
+ return chain.unit;
+}
+
+} // namespace Fortran::runtime::io
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/unit-map.h b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/unit-map.h
new file mode 100644
index 00000000000..fa61288a1e1
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/unit-map.h
@@ -0,0 +1,103 @@
+//===-- lib/runtime/unit-map.h ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Maps Fortran unit numbers to their ExternalFileUnit instances.
+// A simple hash table with forward-linked chains per bucket.
+
+#ifndef FLANG_RT_RUNTIME_UNIT_MAP_H_
+#define FLANG_RT_RUNTIME_UNIT_MAP_H_
+
+#include "unit.h"
+#include "flang-rt/runtime/lock.h"
+#include "flang-rt/runtime/memory.h"
+#include "flang/Common/fast-int-set.h"
+#include <cstdint>
+#include <cstdlib>
+
+namespace Fortran::runtime::io {
+
+class UnitMap {
+public:
+ ExternalFileUnit *LookUp(int n) {
+ CriticalSection critical{lock_};
+ return Find(n);
+ }
+
+ ExternalFileUnit *LookUpOrCreate(
+ int n, const Terminator &terminator, bool &wasExtant) {
+ CriticalSection critical{lock_};
+ if (auto *p{Find(n)}) {
+ wasExtant = true;
+ return p;
+ } else {
+ wasExtant = false;
+ return n >= 0 ? &Create(n, terminator) : nullptr;
+ }
+ }
+
+ // Unit look-up by name is needed for INQUIRE(FILE="...")
+ ExternalFileUnit *LookUp(const char *path, std::size_t pathLen) {
+ CriticalSection critical{lock_};
+ return Find(path, pathLen);
+ }
+
+ ExternalFileUnit &NewUnit(const Terminator &);
+
+ // To prevent races, the unit is removed from the map if it exists,
+ // and put on the closing_ list until DestroyClosed() is called.
+ ExternalFileUnit *LookUpForClose(int);
+
+ void DestroyClosed(ExternalFileUnit &);
+ void CloseAll(IoErrorHandler &);
+ void FlushAll(IoErrorHandler &);
+
+private:
+ struct Chain {
+ explicit Chain(int n) : unit{n} {}
+ ExternalFileUnit unit;
+ OwningPtr<Chain> next{nullptr};
+ };
+
+ static constexpr int buckets_{1031}; // must be prime
+
+ // The pool of recyclable new unit numbers uses the range that
+ // works even with INTEGER(kind=1). 0 and -1 are never used.
+ static constexpr int maxNewUnits_{129}; // [ -128 .. 0 ]
+
+ int Hash(int n) { return std::abs(n) % buckets_; }
+
+ void Initialize();
+
+ ExternalFileUnit *Find(int n) {
+ Chain *previous{nullptr};
+ int hash{Hash(n)};
+ for (Chain *p{bucket_[hash].get()}; p; previous = p, p = p->next.get()) {
+ if (p->unit.unitNumber() == n) {
+ if (previous) {
+ // Move found unit to front of chain for quicker lookup next time
+ previous->next.swap(p->next); // now p->next.get() == p
+ bucket_[hash].swap(p->next); // now bucket_[hash].get() == p
+ }
+ return &p->unit;
+ }
+ }
+ return nullptr;
+ }
+ ExternalFileUnit *Find(const char *path, std::size_t pathLen);
+
+ ExternalFileUnit &Create(int, const Terminator &);
+
+ Lock lock_;
+ bool isInitialized_{false};
+ OwningPtr<Chain> bucket_[buckets_]{}; // all owned by *this
+ OwningPtr<Chain> closing_{nullptr}; // units during CLOSE statement
+ common::FastIntSet<maxNewUnits_> freeNewUnits_;
+ int emergencyNewUnit_{maxNewUnits_}; // not recycled
+};
+} // namespace Fortran::runtime::io
+#endif // FLANG_RT_RUNTIME_UNIT_MAP_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/unit.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/unit.cpp
new file mode 100644
index 00000000000..5f52fa2781d
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/unit.cpp
@@ -0,0 +1,875 @@
+//===-- lib/runtime/unit.cpp ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Implementation of ExternalFileUnit common for both
+// RT_USE_PSEUDO_FILE_UNIT=0 and RT_USE_PSEUDO_FILE_UNIT=1.
+//
+//===----------------------------------------------------------------------===//
+#include "unit.h"
+#include "flang-rt/runtime/io-error.h"
+#include "flang-rt/runtime/lock.h"
+#include "flang-rt/runtime/tools.h"
+#include <limits>
+#include <utility>
+
+namespace Fortran::runtime::io {
+
+#ifndef FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+RT_OFFLOAD_VAR_GROUP_BEGIN
+RT_VAR_ATTRS ExternalFileUnit *defaultInput{nullptr}; // unit 5
+RT_VAR_ATTRS ExternalFileUnit *defaultOutput{nullptr}; // unit 6
+RT_VAR_ATTRS ExternalFileUnit *errorOutput{nullptr}; // unit 0 extension
+RT_OFFLOAD_VAR_GROUP_END
+#endif // FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+
+RT_OFFLOAD_API_GROUP_BEGIN
+
+static inline RT_API_ATTRS void SwapEndianness(
+ char *data, std::size_t bytes, std::size_t elementBytes) {
+ if (elementBytes > 1) {
+ auto half{elementBytes >> 1};
+ for (std::size_t j{0}; j + elementBytes <= bytes; j += elementBytes) {
+ for (std::size_t k{0}; k < half; ++k) {
+ RT_DIAG_PUSH
+ RT_DIAG_DISABLE_CALL_HOST_FROM_DEVICE_WARN
+ std::swap(data[j + k], data[j + elementBytes - 1 - k]);
+ RT_DIAG_POP
+ }
+ }
+ }
+}
+
+bool ExternalFileUnit::Emit(const char *data, std::size_t bytes,
+ std::size_t elementBytes, IoErrorHandler &handler) {
+ auto furthestAfter{std::max(furthestPositionInRecord,
+ positionInRecord + static_cast<std::int64_t>(bytes))};
+ if (openRecl) {
+ // Check for fixed-length record overrun, but allow for
+ // sequential record termination.
+ int extra{0};
+ int header{0};
+ if (access == Access::Sequential) {
+ if (isUnformatted.value_or(false)) {
+ // record header + footer
+ header = static_cast<int>(sizeof(std::uint32_t));
+ extra = 2 * header;
+ } else {
+#ifdef _WIN32
+ if (!isWindowsTextFile()) {
+ ++extra; // carriage return (CR)
+ }
+#endif
+ ++extra; // newline (LF)
+ }
+ }
+ if (furthestAfter > extra + *openRecl) {
+ handler.SignalError(IostatRecordWriteOverrun,
+ "Attempt to write %zd bytes to position %jd in a fixed-size record "
+ "of %jd bytes",
+ bytes, static_cast<std::intmax_t>(positionInRecord - header),
+ static_cast<std::intmax_t>(*openRecl));
+ return false;
+ }
+ }
+ if (recordLength) {
+ // It is possible for recordLength to have a value now for a
+ // variable-length output record if the previous operation
+ // was a BACKSPACE or non advancing input statement.
+ recordLength.reset();
+ beganReadingRecord_ = false;
+ }
+ if (IsAfterEndfile()) {
+ handler.SignalError(IostatWriteAfterEndfile);
+ return false;
+ }
+ CheckDirectAccess(handler);
+ WriteFrame(frameOffsetInFile_, recordOffsetInFrame_ + furthestAfter, handler);
+ if (positionInRecord > furthestPositionInRecord) {
+ std::memset(Frame() + recordOffsetInFrame_ + furthestPositionInRecord, ' ',
+ positionInRecord - furthestPositionInRecord);
+ }
+ char *to{Frame() + recordOffsetInFrame_ + positionInRecord};
+ std::memcpy(to, data, bytes);
+ if (swapEndianness_) {
+ SwapEndianness(to, bytes, elementBytes);
+ }
+ positionInRecord += bytes;
+ furthestPositionInRecord = furthestAfter;
+ anyWriteSinceLastPositioning_ = true;
+ return true;
+}
+
+bool ExternalFileUnit::Receive(char *data, std::size_t bytes,
+ std::size_t elementBytes, IoErrorHandler &handler) {
+ RUNTIME_CHECK(handler, direction_ == Direction::Input);
+ auto furthestAfter{std::max(furthestPositionInRecord,
+ positionInRecord + static_cast<std::int64_t>(bytes))};
+ if (furthestAfter > recordLength.value_or(furthestAfter)) {
+ handler.SignalError(IostatRecordReadOverrun,
+ "Attempt to read %zd bytes at position %jd in a record of %jd bytes",
+ bytes, static_cast<std::intmax_t>(positionInRecord),
+ static_cast<std::intmax_t>(*recordLength));
+ return false;
+ }
+ auto need{recordOffsetInFrame_ + furthestAfter};
+ auto got{ReadFrame(frameOffsetInFile_, need, handler)};
+ if (got >= need) {
+ std::memcpy(data, Frame() + recordOffsetInFrame_ + positionInRecord, bytes);
+ if (swapEndianness_) {
+ SwapEndianness(data, bytes, elementBytes);
+ }
+ positionInRecord += bytes;
+ furthestPositionInRecord = furthestAfter;
+ return true;
+ } else {
+ HitEndOnRead(handler);
+ return false;
+ }
+}
+
+std::size_t ExternalFileUnit::GetNextInputBytes(
+ const char *&p, IoErrorHandler &handler) {
+ RUNTIME_CHECK(handler, direction_ == Direction::Input);
+ if (access == Access::Sequential &&
+ positionInRecord < recordLength.value_or(positionInRecord)) {
+ // Fast path for variable-length formatted input: the whole record
+ // must be in frame as a result of newline detection for record length.
+ p = Frame() + recordOffsetInFrame_ + positionInRecord;
+ return *recordLength - positionInRecord;
+ }
+ std::size_t length{1};
+ if (auto recl{EffectiveRecordLength()}) {
+ if (positionInRecord < *recl) {
+ length = *recl - positionInRecord;
+ } else {
+ p = nullptr;
+ return 0;
+ }
+ }
+ p = FrameNextInput(handler, length);
+ return p ? length : 0;
+}
+
+std::size_t ExternalFileUnit::ViewBytesInRecord(
+ const char *&p, bool forward) const {
+ p = nullptr;
+ auto recl{recordLength.value_or(positionInRecord)};
+ if (forward) {
+ if (positionInRecord < recl) {
+ p = Frame() + recordOffsetInFrame_ + positionInRecord;
+ return recl - positionInRecord;
+ }
+ } else {
+ if (positionInRecord <= recl) {
+ p = Frame() + recordOffsetInFrame_ + positionInRecord;
+ }
+ return positionInRecord - leftTabLimit.value_or(0);
+ }
+ return 0;
+}
+
+const char *ExternalFileUnit::FrameNextInput(
+ IoErrorHandler &handler, std::size_t bytes) {
+ RUNTIME_CHECK(handler, isUnformatted.has_value() && !*isUnformatted);
+ if (static_cast<std::int64_t>(positionInRecord + bytes) <=
+ recordLength.value_or(positionInRecord + bytes)) {
+ auto at{recordOffsetInFrame_ + positionInRecord};
+ auto need{static_cast<std::size_t>(at + bytes)};
+ auto got{ReadFrame(frameOffsetInFile_, need, handler)};
+ SetVariableFormattedRecordLength();
+ if (got >= need) {
+ return Frame() + at;
+ }
+ HitEndOnRead(handler);
+ }
+ return nullptr;
+}
+
+bool ExternalFileUnit::SetVariableFormattedRecordLength() {
+ if (recordLength || access == Access::Direct) {
+ return true;
+ } else if (FrameLength() > recordOffsetInFrame_) {
+ const char *record{Frame() + recordOffsetInFrame_};
+ std::size_t bytes{FrameLength() - recordOffsetInFrame_};
+ if (const char *nl{FindCharacter(record, '\n', bytes)}) {
+ recordLength = nl - record;
+ if (*recordLength > 0 && record[*recordLength - 1] == '\r') {
+ --*recordLength;
+ }
+ return true;
+ }
+ }
+ return false;
+}
+
+bool ExternalFileUnit::BeginReadingRecord(IoErrorHandler &handler) {
+ RUNTIME_CHECK(handler, direction_ == Direction::Input);
+ if (!beganReadingRecord_) {
+ beganReadingRecord_ = true;
+ // Don't use IsAtEOF() to check for an EOF condition here, just detect
+ // it from a failed or short read from the file. IsAtEOF() could be
+ // wrong for formatted input if actual newline characters had been
+ // written in-band by previous WRITEs before a REWIND. In fact,
+ // now that we know that the unit is being used for input (again),
+ // it's best to reset endfileRecordNumber and ensure IsAtEOF() will
+ // now be true on return only if it gets set by HitEndOnRead().
+ endfileRecordNumber.reset();
+ if (access == Access::Direct) {
+ CheckDirectAccess(handler);
+ auto need{static_cast<std::size_t>(recordOffsetInFrame_ + *openRecl)};
+ auto got{ReadFrame(frameOffsetInFile_, need, handler)};
+ if (got >= need) {
+ recordLength = openRecl;
+ } else {
+ recordLength.reset();
+ HitEndOnRead(handler);
+ }
+ } else {
+ if (anyWriteSinceLastPositioning_ && access == Access::Sequential) {
+ // Most Fortran implementations allow a READ after a WRITE;
+ // the read then just hits an EOF.
+ DoEndfile<false, Direction::Input>(handler);
+ }
+ recordLength.reset();
+ RUNTIME_CHECK(handler, isUnformatted.has_value());
+ if (*isUnformatted) {
+ if (access == Access::Sequential) {
+ BeginSequentialVariableUnformattedInputRecord(handler);
+ }
+ } else { // formatted sequential or stream
+ BeginVariableFormattedInputRecord(handler);
+ }
+ }
+ }
+ RUNTIME_CHECK(handler,
+ recordLength.has_value() || !IsRecordFile() || handler.InError());
+ return !handler.InError();
+}
+
+void ExternalFileUnit::FinishReadingRecord(IoErrorHandler &handler) {
+ RUNTIME_CHECK(handler, direction_ == Direction::Input && beganReadingRecord_);
+ beganReadingRecord_ = false;
+ if (handler.GetIoStat() == IostatEnd ||
+ (IsRecordFile() && !recordLength.has_value())) {
+ // Avoid bogus crashes in END/ERR circumstances; but
+ // still increment the current record number so that
+ // an attempted read of an endfile record, followed by
+ // a BACKSPACE, will still be at EOF.
+ ++currentRecordNumber;
+ } else if (IsRecordFile()) {
+ recordOffsetInFrame_ += *recordLength;
+ if (access != Access::Direct) {
+ RUNTIME_CHECK(handler, isUnformatted.has_value());
+ recordLength.reset();
+ if (isUnformatted.value_or(false)) {
+ // Retain footer in frame for more efficient BACKSPACE
+ frameOffsetInFile_ += recordOffsetInFrame_;
+ recordOffsetInFrame_ = sizeof(std::uint32_t);
+ } else { // formatted
+ if (FrameLength() > recordOffsetInFrame_ &&
+ Frame()[recordOffsetInFrame_] == '\r') {
+ ++recordOffsetInFrame_;
+ }
+ if (FrameLength() > recordOffsetInFrame_ &&
+ Frame()[recordOffsetInFrame_] == '\n') {
+ ++recordOffsetInFrame_;
+ }
+ if (!pinnedFrame || mayPosition()) {
+ frameOffsetInFile_ += recordOffsetInFrame_;
+ recordOffsetInFrame_ = 0;
+ }
+ }
+ }
+ ++currentRecordNumber;
+ } else { // unformatted stream
+ furthestPositionInRecord =
+ std::max(furthestPositionInRecord, positionInRecord);
+ frameOffsetInFile_ += recordOffsetInFrame_ + furthestPositionInRecord;
+ recordOffsetInFrame_ = 0;
+ }
+ BeginRecord();
+ leftTabLimit.reset();
+}
+
+bool ExternalFileUnit::AdvanceRecord(IoErrorHandler &handler) {
+ if (direction_ == Direction::Input) {
+ FinishReadingRecord(handler);
+ return BeginReadingRecord(handler);
+ } else { // Direction::Output
+ bool ok{true};
+ RUNTIME_CHECK(handler, isUnformatted.has_value());
+ positionInRecord = furthestPositionInRecord;
+ if (access == Access::Direct) {
+ if (furthestPositionInRecord <
+ openRecl.value_or(furthestPositionInRecord)) {
+ // Pad remainder of fixed length record
+ WriteFrame(
+ frameOffsetInFile_, recordOffsetInFrame_ + *openRecl, handler);
+ std::memset(Frame() + recordOffsetInFrame_ + furthestPositionInRecord,
+ isUnformatted.value_or(false) ? 0 : ' ',
+ *openRecl - furthestPositionInRecord);
+ furthestPositionInRecord = *openRecl;
+ }
+ } else if (*isUnformatted) {
+ if (access == Access::Sequential) {
+ // Append the length of a sequential unformatted variable-length record
+ // as its footer, then overwrite the reserved first four bytes of the
+ // record with its length as its header. These four bytes were skipped
+ // over in BeginUnformattedIO<Output>().
+ // TODO: Break very large records up into subrecords with negative
+ // headers &/or footers
+ std::uint32_t length;
+ length = furthestPositionInRecord - sizeof length;
+ ok = ok &&
+ Emit(reinterpret_cast<const char *>(&length), sizeof length,
+ sizeof length, handler);
+ positionInRecord = 0;
+ ok = ok &&
+ Emit(reinterpret_cast<const char *>(&length), sizeof length,
+ sizeof length, handler);
+ } else {
+ // Unformatted stream: nothing to do
+ }
+ } else if (handler.GetIoStat() != IostatOk &&
+ furthestPositionInRecord == 0) {
+ // Error in formatted variable length record, and no output yet; do
+ // nothing, like most other Fortran compilers do.
+ return true;
+ } else {
+ // Terminate formatted variable length record
+ const char *lineEnding{"\n"};
+ std::size_t lineEndingBytes{1};
+#ifdef _WIN32
+ if (!isWindowsTextFile()) {
+ lineEnding = "\r\n";
+ lineEndingBytes = 2;
+ }
+#endif
+ ok = ok && Emit(lineEnding, lineEndingBytes, 1, handler);
+ }
+ leftTabLimit.reset();
+ if (IsAfterEndfile()) {
+ return false;
+ }
+ CommitWrites();
+ ++currentRecordNumber;
+ if (access != Access::Direct) {
+ impliedEndfile_ = IsRecordFile();
+ if (IsAtEOF()) {
+ endfileRecordNumber.reset();
+ }
+ }
+ return ok;
+ }
+}
+
+void ExternalFileUnit::BackspaceRecord(IoErrorHandler &handler) {
+ if (access == Access::Direct || !IsRecordFile()) {
+ handler.SignalError(IostatBackspaceNonSequential,
+ "BACKSPACE(UNIT=%d) on direct-access file or unformatted stream",
+ unitNumber());
+ } else {
+ if (IsAfterEndfile()) {
+ // BACKSPACE after explicit ENDFILE
+ currentRecordNumber = *endfileRecordNumber;
+ } else if (leftTabLimit && direction_ == Direction::Input) {
+ // BACKSPACE after non-advancing input
+ leftTabLimit.reset();
+ } else {
+ DoImpliedEndfile(handler);
+ if (frameOffsetInFile_ + recordOffsetInFrame_ > 0) {
+ --currentRecordNumber;
+ if (openRecl && access == Access::Direct) {
+ BackspaceFixedRecord(handler);
+ } else {
+ RUNTIME_CHECK(handler, isUnformatted.has_value());
+ if (isUnformatted.value_or(false)) {
+ BackspaceVariableUnformattedRecord(handler);
+ } else {
+ BackspaceVariableFormattedRecord(handler);
+ }
+ }
+ }
+ }
+ BeginRecord();
+ anyWriteSinceLastPositioning_ = false;
+ }
+}
+
+void ExternalFileUnit::FlushOutput(IoErrorHandler &handler) {
+ if (!mayPosition()) {
+ auto frameAt{FrameAt()};
+ if (frameOffsetInFile_ >= frameAt &&
+ frameOffsetInFile_ <
+ static_cast<std::int64_t>(frameAt + FrameLength())) {
+ // A Flush() that's about to happen to a non-positionable file
+ // needs to advance frameOffsetInFile_ to prevent attempts at
+ // impossible seeks
+ CommitWrites();
+ leftTabLimit.reset();
+ }
+ }
+ Flush(handler);
+}
+
+void ExternalFileUnit::FlushIfTerminal(IoErrorHandler &handler) {
+ if (isTerminal()) {
+ FlushOutput(handler);
+ }
+}
+
+void ExternalFileUnit::Endfile(IoErrorHandler &handler) {
+ if (access == Access::Direct) {
+ handler.SignalError(IostatEndfileDirect,
+ "ENDFILE(UNIT=%d) on direct-access file", unitNumber());
+ } else if (!mayWrite()) {
+ handler.SignalError(IostatEndfileUnwritable,
+ "ENDFILE(UNIT=%d) on read-only file", unitNumber());
+ } else if (IsAfterEndfile()) {
+ // ENDFILE after ENDFILE
+ } else {
+ DoEndfile(handler);
+ if (IsRecordFile() && access != Access::Direct) {
+ // Explicit ENDFILE leaves position *after* the endfile record
+ RUNTIME_CHECK(handler, endfileRecordNumber.has_value());
+ currentRecordNumber = *endfileRecordNumber + 1;
+ }
+ }
+}
+
+void ExternalFileUnit::Rewind(IoErrorHandler &handler) {
+ if (access == Access::Direct) {
+ handler.SignalError(IostatRewindNonSequential,
+ "REWIND(UNIT=%d) on non-sequential file", unitNumber());
+ } else {
+ DoImpliedEndfile(handler);
+ SetPosition(0);
+ currentRecordNumber = 1;
+ anyWriteSinceLastPositioning_ = false;
+ }
+}
+
+void ExternalFileUnit::SetPosition(std::int64_t pos) {
+ frameOffsetInFile_ = pos;
+ recordOffsetInFrame_ = 0;
+ if (access == Access::Direct) {
+ directAccessRecWasSet_ = true;
+ }
+ BeginRecord();
+ beganReadingRecord_ = false; // for positioning after nonadvancing input
+ leftTabLimit.reset();
+}
+
+void ExternalFileUnit::Sought(std::int64_t zeroBasedPos) {
+ SetPosition(zeroBasedPos);
+ if (zeroBasedPos == 0) {
+ currentRecordNumber = 1;
+ } else {
+ // We no longer know which record we're in. Set currentRecordNumber to
+ // a large value from whence we can both advance and backspace.
+ currentRecordNumber = std::numeric_limits<std::int64_t>::max() / 2;
+ endfileRecordNumber.reset();
+ }
+}
+
+bool ExternalFileUnit::SetStreamPos(
+ std::int64_t oneBasedPos, IoErrorHandler &handler) {
+ if (access != Access::Stream) {
+ handler.SignalError("POS= may not appear unless ACCESS='STREAM'");
+ return false;
+ }
+ if (oneBasedPos < 1) { // POS=1 is beginning of file (12.6.2.11)
+ handler.SignalError(
+ "POS=%zd is invalid", static_cast<std::intmax_t>(oneBasedPos));
+ return false;
+ }
+ // A backwards POS= implies truncation after writing, at least in
+ // Intel and NAG.
+ if (static_cast<std::size_t>(oneBasedPos - 1) <
+ frameOffsetInFile_ + recordOffsetInFrame_) {
+ DoImpliedEndfile(handler);
+ }
+ Sought(oneBasedPos - 1);
+ return true;
+}
+
+// GNU FSEEK extension
+RT_API_ATTRS bool ExternalFileUnit::Fseek(std::int64_t zeroBasedPos,
+ enum FseekWhence whence, IoErrorHandler &handler) {
+ if (whence == FseekEnd) {
+ Flush(handler); // updates knownSize_
+ if (auto size{knownSize()}) {
+ zeroBasedPos += *size;
+ } else {
+ return false;
+ }
+ } else if (whence == FseekCurrent) {
+ zeroBasedPos += InquirePos() - 1;
+ }
+ if (zeroBasedPos >= 0) {
+ Sought(zeroBasedPos);
+ return true;
+ } else {
+ return false;
+ }
+}
+
+bool ExternalFileUnit::SetDirectRec(
+ std::int64_t oneBasedRec, IoErrorHandler &handler) {
+ if (access != Access::Direct) {
+ handler.SignalError("REC= may not appear unless ACCESS='DIRECT'");
+ return false;
+ }
+ if (!openRecl) {
+ handler.SignalError("RECL= was not specified");
+ return false;
+ }
+ if (oneBasedRec < 1) {
+ handler.SignalError(
+ "REC=%zd is invalid", static_cast<std::intmax_t>(oneBasedRec));
+ return false;
+ }
+ currentRecordNumber = oneBasedRec;
+ SetPosition((oneBasedRec - 1) * *openRecl);
+ return true;
+}
+
+void ExternalFileUnit::EndIoStatement() {
+ io_.reset();
+ u_.emplace<std::monostate>();
+ lock_.Drop();
+}
+
+void ExternalFileUnit::BeginSequentialVariableUnformattedInputRecord(
+ IoErrorHandler &handler) {
+ RUNTIME_CHECK(handler, access == Access::Sequential);
+ std::uint32_t header{0}, footer{0};
+ std::size_t need{recordOffsetInFrame_ + sizeof header};
+ std::size_t got{ReadFrame(frameOffsetInFile_, need, handler)};
+ // Try to emit informative errors to help debug corrupted files.
+ const char *error{nullptr};
+ if (got < need) {
+ if (got == recordOffsetInFrame_) {
+ HitEndOnRead(handler);
+ } else {
+ error = "Unformatted variable-length sequential file input failed at "
+ "record #%jd (file offset %jd): truncated record header";
+ }
+ } else {
+ header = ReadHeaderOrFooter(recordOffsetInFrame_);
+ recordLength = sizeof header + header; // does not include footer
+ need = recordOffsetInFrame_ + *recordLength + sizeof footer;
+ got = ReadFrame(frameOffsetInFile_, need, handler);
+ if (got >= need) {
+ footer = ReadHeaderOrFooter(recordOffsetInFrame_ + *recordLength);
+ }
+ if (frameOffsetInFile_ == 0 && recordOffsetInFrame_ == 0 &&
+ (got < need || footer != header)) {
+ // Maybe an omitted or incorrect byte swap flag setting?
+ // Try it the other way, since this is the first record.
+ // (N.B. Won't work on files starting with empty records, but there's
+ // no good way to know later if all preceding records were empty.)
+ swapEndianness_ = !swapEndianness_;
+ std::uint32_t header2{ReadHeaderOrFooter(0)};
+ std::size_t recordLength2{sizeof header2 + header2};
+ std::size_t need2{recordLength2 + sizeof footer};
+ std::size_t got2{ReadFrame(0, need2, handler)};
+ if (got2 >= need2) {
+ std::uint32_t footer2{ReadHeaderOrFooter(recordLength2)};
+ if (footer2 == header2) {
+ error = "Unformatted variable-length sequential file input "
+ "failed on the first record, probably due to a need "
+ "for byte order data conversion; consider adding "
+ "CONVERT='SWAP' to the OPEN statement or adding "
+ "FORT_CONVERT=SWAP to the execution environment";
+ }
+ }
+ swapEndianness_ = !swapEndianness_;
+ }
+ if (error) {
+ } else if (got < need) {
+ error = "Unformatted variable-length sequential file input failed at "
+ "record #%jd (file offset %jd): hit EOF reading record with "
+ "length %jd bytes";
+ } else if (footer != header) {
+ error = "Unformatted variable-length sequential file input failed at "
+ "record #%jd (file offset %jd): record header has length %jd "
+ "that does not match record footer (%jd)";
+ }
+ }
+ if (error) {
+ handler.SignalError(error, static_cast<std::intmax_t>(currentRecordNumber),
+ static_cast<std::intmax_t>(frameOffsetInFile_),
+ static_cast<std::intmax_t>(header), static_cast<std::intmax_t>(footer));
+ // TODO: error recovery
+ }
+ positionInRecord = sizeof header;
+}
+
+void ExternalFileUnit::BeginVariableFormattedInputRecord(
+ IoErrorHandler &handler) {
+ if (this == defaultInput) {
+ if (defaultOutput) {
+ defaultOutput->FlushOutput(handler);
+ }
+ if (errorOutput) {
+ errorOutput->FlushOutput(handler);
+ }
+ }
+ std::size_t length{0};
+ do {
+ std::size_t need{length + 1};
+ length =
+ ReadFrame(frameOffsetInFile_, recordOffsetInFrame_ + need, handler) -
+ recordOffsetInFrame_;
+ if (length < need) {
+ if (length > 0) {
+ // final record w/o \n
+ recordLength = length;
+ unterminatedRecord = true;
+ } else {
+ HitEndOnRead(handler);
+ }
+ break;
+ }
+ } while (!SetVariableFormattedRecordLength());
+}
+
+void ExternalFileUnit::BackspaceFixedRecord(IoErrorHandler &handler) {
+ RUNTIME_CHECK(handler, openRecl.has_value());
+ if (frameOffsetInFile_ < *openRecl) {
+ handler.SignalError(IostatBackspaceAtFirstRecord);
+ } else {
+ frameOffsetInFile_ -= *openRecl;
+ }
+}
+
+void ExternalFileUnit::BackspaceVariableUnformattedRecord(
+ IoErrorHandler &handler) {
+ std::uint32_t header{0};
+ auto headerBytes{static_cast<std::int64_t>(sizeof header)};
+ frameOffsetInFile_ += recordOffsetInFrame_;
+ recordOffsetInFrame_ = 0;
+ if (frameOffsetInFile_ <= headerBytes) {
+ handler.SignalError(IostatBackspaceAtFirstRecord);
+ return;
+ }
+ // Error conditions here cause crashes, not file format errors, because the
+ // validity of the file structure before the current record will have been
+ // checked informatively in NextSequentialVariableUnformattedInputRecord().
+ std::size_t got{
+ ReadFrame(frameOffsetInFile_ - headerBytes, headerBytes, handler)};
+ if (static_cast<std::int64_t>(got) < headerBytes) {
+ handler.SignalError(IostatShortRead);
+ return;
+ }
+ recordLength = ReadHeaderOrFooter(0);
+ if (frameOffsetInFile_ < *recordLength + 2 * headerBytes) {
+ handler.SignalError(IostatBadUnformattedRecord);
+ return;
+ }
+ frameOffsetInFile_ -= *recordLength + 2 * headerBytes;
+ auto need{static_cast<std::size_t>(
+ recordOffsetInFrame_ + sizeof header + *recordLength)};
+ got = ReadFrame(frameOffsetInFile_, need, handler);
+ if (got < need) {
+ handler.SignalError(IostatShortRead);
+ return;
+ }
+ header = ReadHeaderOrFooter(recordOffsetInFrame_);
+ if (header != *recordLength) {
+ handler.SignalError(IostatBadUnformattedRecord);
+ return;
+ }
+}
+
+// There's no portable memrchr(), unfortunately, and strrchr() would
+// fail on a record with a NUL, so we have to do it the hard way.
+static RT_API_ATTRS const char *FindLastNewline(
+ const char *str, std::size_t length) {
+ for (const char *p{str + length}; p >= str; p--) {
+ if (*p == '\n') {
+ return p;
+ }
+ }
+ return nullptr;
+}
+
+void ExternalFileUnit::BackspaceVariableFormattedRecord(
+ IoErrorHandler &handler) {
+ // File offset of previous record's newline
+ auto prevNL{
+ frameOffsetInFile_ + static_cast<std::int64_t>(recordOffsetInFrame_) - 1};
+ if (prevNL < 0) {
+ handler.SignalError(IostatBackspaceAtFirstRecord);
+ return;
+ }
+ while (true) {
+ if (frameOffsetInFile_ < prevNL) {
+ if (const char *p{
+ FindLastNewline(Frame(), prevNL - 1 - frameOffsetInFile_)}) {
+ recordOffsetInFrame_ = p - Frame() + 1;
+ recordLength = prevNL - (frameOffsetInFile_ + recordOffsetInFrame_);
+ break;
+ }
+ }
+ if (frameOffsetInFile_ == 0) {
+ recordOffsetInFrame_ = 0;
+ recordLength = prevNL;
+ break;
+ }
+ frameOffsetInFile_ -= std::min<std::int64_t>(frameOffsetInFile_, 1024);
+ auto need{static_cast<std::size_t>(prevNL + 1 - frameOffsetInFile_)};
+ auto got{ReadFrame(frameOffsetInFile_, need, handler)};
+ if (got < need) {
+ handler.SignalError(IostatShortRead);
+ return;
+ }
+ }
+ if (Frame()[recordOffsetInFrame_ + *recordLength] != '\n') {
+ handler.SignalError(IostatMissingTerminator);
+ return;
+ }
+ if (*recordLength > 0 &&
+ Frame()[recordOffsetInFrame_ + *recordLength - 1] == '\r') {
+ --*recordLength;
+ }
+}
+
+void ExternalFileUnit::DoImpliedEndfile(IoErrorHandler &handler) {
+ if (access != Access::Direct) {
+ if (!impliedEndfile_ && leftTabLimit && direction_ == Direction::Output) {
+ // Flush a partial record after non-advancing output
+ impliedEndfile_ = true;
+ }
+ if (impliedEndfile_ && mayPosition()) {
+ DoEndfile(handler);
+ }
+ }
+ impliedEndfile_ = false;
+}
+
+template <bool ANY_DIR, Direction DIR>
+void ExternalFileUnit::DoEndfile(IoErrorHandler &handler) {
+ if (IsRecordFile() && access != Access::Direct) {
+ furthestPositionInRecord =
+ std::max(positionInRecord, furthestPositionInRecord);
+ if (leftTabLimit) { // last I/O was non-advancing
+ if (access == Access::Sequential && direction_ == Direction::Output) {
+ if constexpr (ANY_DIR || DIR == Direction::Output) {
+ // When DoEndfile() is called from BeginReadingRecord(),
+ // this call to AdvanceRecord() may appear as a recursion
+ // though it may never happen. Expose the call only
+ // under the constexpr direction check.
+ AdvanceRecord(handler);
+ } else {
+ // This check always fails if we are here.
+ RUNTIME_CHECK(handler, direction_ != Direction::Output);
+ }
+ } else { // Access::Stream or input
+ leftTabLimit.reset();
+ ++currentRecordNumber;
+ }
+ }
+ endfileRecordNumber = currentRecordNumber;
+ }
+ frameOffsetInFile_ += recordOffsetInFrame_ + furthestPositionInRecord;
+ recordOffsetInFrame_ = 0;
+ FlushOutput(handler);
+ Truncate(frameOffsetInFile_, handler);
+ TruncateFrame(frameOffsetInFile_, handler);
+ BeginRecord();
+ impliedEndfile_ = false;
+ anyWriteSinceLastPositioning_ = false;
+}
+
+template void ExternalFileUnit::DoEndfile(IoErrorHandler &handler);
+template void ExternalFileUnit::DoEndfile<false, Direction::Output>(
+ IoErrorHandler &handler);
+template void ExternalFileUnit::DoEndfile<false, Direction::Input>(
+ IoErrorHandler &handler);
+
+void ExternalFileUnit::CommitWrites() {
+ frameOffsetInFile_ +=
+ recordOffsetInFrame_ + recordLength.value_or(furthestPositionInRecord);
+ recordOffsetInFrame_ = 0;
+ BeginRecord();
+}
+
+bool ExternalFileUnit::CheckDirectAccess(IoErrorHandler &handler) {
+ if (access == Access::Direct) {
+ RUNTIME_CHECK(handler, openRecl);
+ if (!directAccessRecWasSet_) {
+ handler.SignalError(
+ "No REC= was specified for a data transfer with ACCESS='DIRECT'");
+ return false;
+ }
+ }
+ return true;
+}
+
+void ExternalFileUnit::HitEndOnRead(IoErrorHandler &handler) {
+ handler.SignalEnd();
+ if (IsRecordFile() && access != Access::Direct) {
+ endfileRecordNumber = currentRecordNumber;
+ }
+}
+
+ChildIo &ExternalFileUnit::PushChildIo(IoStatementState &parent) {
+ OwningPtr<ChildIo> current{std::move(child_)};
+ Terminator &terminator{parent.GetIoErrorHandler()};
+ OwningPtr<ChildIo> next{New<ChildIo>{terminator}(parent, std::move(current))};
+ child_.reset(next.release());
+ return *child_;
+}
+
+void ExternalFileUnit::PopChildIo(ChildIo &child) {
+ if (child_.get() != &child) {
+ child.parent().GetIoErrorHandler().Crash(
+ "ChildIo being popped is not top of stack");
+ }
+ child_.reset(child.AcquirePrevious().release()); // deletes top child
+}
+
+std::uint32_t ExternalFileUnit::ReadHeaderOrFooter(std::int64_t frameOffset) {
+ std::uint32_t word;
+ char *wordPtr{reinterpret_cast<char *>(&word)};
+ std::memcpy(wordPtr, Frame() + frameOffset, sizeof word);
+ if (swapEndianness_) {
+ SwapEndianness(wordPtr, sizeof word, sizeof word);
+ }
+ return word;
+}
+
+void ChildIo::EndIoStatement() {
+ io_.reset();
+ u_.emplace<std::monostate>();
+}
+
+Iostat ChildIo::CheckFormattingAndDirection(
+ bool unformatted, Direction direction) {
+ bool parentIsInput{!parent_.get_if<IoDirectionState<Direction::Output>>()};
+ bool parentIsFormatted{parentIsInput
+ ? parent_.get_if<FormattedIoStatementState<Direction::Input>>() !=
+ nullptr
+ : parent_.get_if<FormattedIoStatementState<Direction::Output>>() !=
+ nullptr};
+ bool parentIsUnformatted{!parentIsFormatted};
+ if (unformatted != parentIsUnformatted) {
+ return unformatted ? IostatUnformattedChildOnFormattedParent
+ : IostatFormattedChildOnUnformattedParent;
+ } else if (parentIsInput != (direction == Direction::Input)) {
+ return parentIsInput ? IostatChildOutputToInputParent
+ : IostatChildInputFromOutputParent;
+ } else {
+ return IostatOk;
+ }
+}
+
+RT_OFFLOAD_API_GROUP_END
+} // namespace Fortran::runtime::io
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/unit.h b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/unit.h
new file mode 100644
index 00000000000..9aec9b16595
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/unit.h
@@ -0,0 +1,306 @@
+//===-- lib/runtime/unit.h --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Fortran external I/O units
+
+#ifndef FLANG_RT_RUNTIME_UNIT_H_
+#define FLANG_RT_RUNTIME_UNIT_H_
+
+#include "flang-rt/runtime/buffer.h"
+#include "flang-rt/runtime/connection.h"
+#include "flang-rt/runtime/environment.h"
+#include "flang-rt/runtime/file.h"
+#include "flang-rt/runtime/format.h"
+#include "flang-rt/runtime/io-error.h"
+#include "flang-rt/runtime/io-stmt.h"
+#include "flang-rt/runtime/lock.h"
+#include "flang-rt/runtime/memory.h"
+#include "flang-rt/runtime/terminator.h"
+#include "flang/Common/constexpr-bitset.h"
+#include "flang/Common/optional.h"
+#include <cstdlib>
+#include <cstring>
+#include <flang/Common/variant.h>
+
+namespace Fortran::runtime::io {
+
+class UnitMap;
+class ChildIo;
+class ExternalFileUnit;
+
+enum FseekWhence {
+ FseekSet = 0,
+ FseekCurrent = 1,
+ FseekEnd = 2,
+};
+
+RT_OFFLOAD_VAR_GROUP_BEGIN
+// Predefined file units.
+extern RT_VAR_ATTRS ExternalFileUnit *defaultInput; // unit 5
+extern RT_VAR_ATTRS ExternalFileUnit *defaultOutput; // unit 6
+extern RT_VAR_ATTRS ExternalFileUnit *errorOutput; // unit 0 extension
+RT_OFFLOAD_VAR_GROUP_END
+
+RT_OFFLOAD_API_GROUP_BEGIN
+
+#if defined(RT_USE_PSEUDO_FILE_UNIT)
+// A flavor of OpenFile class that pretends to be a terminal,
+// and only provides basic buffering of the output
+// in an internal buffer, and Write's the output
+// using std::printf(). Since it does not rely on file system
+// APIs, it can be used to implement external output
+// for offload devices.
+class PseudoOpenFile {
+public:
+ using FileOffset = std::int64_t;
+
+ RT_API_ATTRS const char *path() const { return nullptr; }
+ RT_API_ATTRS std::size_t pathLength() const { return 0; }
+ RT_API_ATTRS void set_path(OwningPtr<char> &&, std::size_t bytes) {}
+ RT_API_ATTRS bool mayRead() const { return false; }
+ RT_API_ATTRS bool mayWrite() const { return true; }
+ RT_API_ATTRS bool mayPosition() const { return false; }
+ RT_API_ATTRS bool mayAsynchronous() const { return false; }
+ RT_API_ATTRS void set_mayAsynchronous(bool yes);
+ // Pretend to be a terminal to force the output
+ // at the end of IO statement.
+ RT_API_ATTRS bool isTerminal() const { return true; }
+ RT_API_ATTRS bool isWindowsTextFile() const { return false; }
+ RT_API_ATTRS Fortran::common::optional<FileOffset> knownSize() const;
+ RT_API_ATTRS bool IsConnected() const { return false; }
+ RT_API_ATTRS void Open(OpenStatus, Fortran::common::optional<Action>,
+ Position, IoErrorHandler &);
+ RT_API_ATTRS void Predefine(int fd) {}
+ RT_API_ATTRS void Close(CloseStatus, IoErrorHandler &);
+ RT_API_ATTRS std::size_t Read(FileOffset, char *, std::size_t minBytes,
+ std::size_t maxBytes, IoErrorHandler &);
+ RT_API_ATTRS std::size_t Write(
+ FileOffset, const char *, std::size_t, IoErrorHandler &);
+ RT_API_ATTRS void Truncate(FileOffset, IoErrorHandler &);
+ RT_API_ATTRS int ReadAsynchronously(
+ FileOffset, char *, std::size_t, IoErrorHandler &);
+ RT_API_ATTRS int WriteAsynchronously(
+ FileOffset, const char *, std::size_t, IoErrorHandler &);
+ RT_API_ATTRS void Wait(int id, IoErrorHandler &);
+ RT_API_ATTRS void WaitAll(IoErrorHandler &);
+ RT_API_ATTRS Position InquirePosition() const;
+};
+#endif // defined(RT_USE_PSEUDO_FILE_UNIT)
+
+#if !defined(RT_USE_PSEUDO_FILE_UNIT)
+using OpenFileClass = OpenFile;
+using FileFrameClass = FileFrame<ExternalFileUnit>;
+#else // defined(RT_USE_PSEUDO_FILE_UNIT)
+using OpenFileClass = PseudoOpenFile;
+// Use not so big buffer for the pseudo file unit frame.
+using FileFrameClass = FileFrame<ExternalFileUnit, 1024>;
+#endif // defined(RT_USE_PSEUDO_FILE_UNIT)
+
+class ExternalFileUnit : public ConnectionState,
+ public OpenFileClass,
+ public FileFrameClass {
+public:
+ static constexpr int maxAsyncIds{64 * 16};
+
+ explicit RT_API_ATTRS ExternalFileUnit(int unitNumber)
+ : unitNumber_{unitNumber} {
+ isUTF8 = executionEnvironment.defaultUTF8;
+ for (int j{0}; 64 * j < maxAsyncIds; ++j) {
+ asyncIdAvailable_[j].set();
+ }
+ asyncIdAvailable_[0].reset(0);
+ }
+ RT_API_ATTRS ~ExternalFileUnit() {}
+
+ RT_API_ATTRS int unitNumber() const { return unitNumber_; }
+ RT_API_ATTRS bool swapEndianness() const { return swapEndianness_; }
+ RT_API_ATTRS bool createdForInternalChildIo() const {
+ return createdForInternalChildIo_;
+ }
+
+ static RT_API_ATTRS ExternalFileUnit *LookUp(int unit);
+ static RT_API_ATTRS ExternalFileUnit *LookUpOrCreate(
+ int unit, const Terminator &, bool &wasExtant);
+ static RT_API_ATTRS ExternalFileUnit *LookUpOrCreateAnonymous(int unit,
+ Direction, Fortran::common::optional<bool> isUnformatted,
+ IoErrorHandler &);
+ static RT_API_ATTRS ExternalFileUnit *LookUp(
+ const char *path, std::size_t pathLen);
+ static RT_API_ATTRS ExternalFileUnit &CreateNew(int unit, const Terminator &);
+ static RT_API_ATTRS ExternalFileUnit *LookUpForClose(int unit);
+ static RT_API_ATTRS ExternalFileUnit &NewUnit(
+ const Terminator &, bool forChildIo);
+ static RT_API_ATTRS void CloseAll(IoErrorHandler &);
+ static RT_API_ATTRS void FlushAll(IoErrorHandler &);
+
+ // Returns true if an existing unit was closed
+ RT_API_ATTRS bool OpenUnit(Fortran::common::optional<OpenStatus>,
+ Fortran::common::optional<Action>, Position, OwningPtr<char> &&path,
+ std::size_t pathLength, Convert, IoErrorHandler &);
+ RT_API_ATTRS bool OpenAnonymousUnit(Fortran::common::optional<OpenStatus>,
+ Fortran::common::optional<Action>, Position, Convert, IoErrorHandler &);
+ RT_API_ATTRS void CloseUnit(CloseStatus, IoErrorHandler &);
+ RT_API_ATTRS void DestroyClosed();
+
+ RT_API_ATTRS Iostat SetDirection(Direction);
+
+ template <typename A, typename... X>
+ RT_API_ATTRS IoStatementState &BeginIoStatement(
+ const Terminator &terminator, X &&...xs) {
+ // Take lock_ and hold it until EndIoStatement().
+#if USE_PTHREADS
+ if (!lock_.TakeIfNoDeadlock()) {
+ terminator.Crash("Recursive I/O attempted on unit %d", unitNumber_);
+ }
+#else
+ lock_.Take();
+#endif
+ A &state{u_.emplace<A>(std::forward<X>(xs)...)};
+ if constexpr (!std::is_same_v<A, OpenStatementState>) {
+ state.mutableModes() = ConnectionState::modes;
+ }
+ directAccessRecWasSet_ = false;
+ io_.emplace(state);
+ return *io_;
+ }
+
+ RT_API_ATTRS bool Emit(
+ const char *, std::size_t, std::size_t elementBytes, IoErrorHandler &);
+ RT_API_ATTRS bool Receive(
+ char *, std::size_t, std::size_t elementBytes, IoErrorHandler &);
+ RT_API_ATTRS std::size_t GetNextInputBytes(const char *&, IoErrorHandler &);
+ RT_API_ATTRS std::size_t ViewBytesInRecord(const char *&, bool forward) const;
+ RT_API_ATTRS bool BeginReadingRecord(IoErrorHandler &);
+ RT_API_ATTRS void FinishReadingRecord(IoErrorHandler &);
+ RT_API_ATTRS bool AdvanceRecord(IoErrorHandler &);
+ RT_API_ATTRS void BackspaceRecord(IoErrorHandler &);
+ RT_API_ATTRS void FlushOutput(IoErrorHandler &);
+ RT_API_ATTRS void FlushIfTerminal(IoErrorHandler &);
+ RT_API_ATTRS void Endfile(IoErrorHandler &);
+ RT_API_ATTRS void Rewind(IoErrorHandler &);
+ RT_API_ATTRS void EndIoStatement();
+ RT_API_ATTRS bool SetStreamPos(std::int64_t oneBasedPos, IoErrorHandler &);
+ RT_API_ATTRS bool Fseek(
+ std::int64_t zeroBasedPos, enum FseekWhence, IoErrorHandler &);
+ RT_API_ATTRS bool SetDirectRec(
+ std::int64_t, IoErrorHandler &); // one-based, for REC=
+ RT_API_ATTRS std::int64_t InquirePos() const {
+ // 12.6.2.11 defines POS=1 as the beginning of file
+ return frameOffsetInFile_ + recordOffsetInFrame_ + positionInRecord + 1;
+ }
+
+ RT_API_ATTRS ChildIo *GetChildIo() { return child_.get(); }
+ RT_API_ATTRS ChildIo &PushChildIo(IoStatementState &);
+ RT_API_ATTRS void PopChildIo(ChildIo &);
+
+ RT_API_ATTRS int GetAsynchronousId(IoErrorHandler &);
+ RT_API_ATTRS bool Wait(int);
+
+private:
+ static RT_API_ATTRS UnitMap &CreateUnitMap();
+ static RT_API_ATTRS UnitMap &GetUnitMap();
+ RT_API_ATTRS const char *FrameNextInput(IoErrorHandler &, std::size_t);
+ RT_API_ATTRS void SetPosition(std::int64_t zeroBasedPos);
+ RT_API_ATTRS void Sought(std::int64_t zeroBasedPos);
+ RT_API_ATTRS void BeginSequentialVariableUnformattedInputRecord(
+ IoErrorHandler &);
+ RT_API_ATTRS void BeginVariableFormattedInputRecord(IoErrorHandler &);
+ RT_API_ATTRS void BackspaceFixedRecord(IoErrorHandler &);
+ RT_API_ATTRS void BackspaceVariableUnformattedRecord(IoErrorHandler &);
+ RT_API_ATTRS void BackspaceVariableFormattedRecord(IoErrorHandler &);
+ RT_API_ATTRS bool SetVariableFormattedRecordLength();
+ RT_API_ATTRS void DoImpliedEndfile(IoErrorHandler &);
+ template <bool ANY_DIR = true, Direction DIR = Direction::Output>
+ RT_API_ATTRS void DoEndfile(IoErrorHandler &);
+ RT_API_ATTRS void CommitWrites();
+ RT_API_ATTRS bool CheckDirectAccess(IoErrorHandler &);
+ RT_API_ATTRS void HitEndOnRead(IoErrorHandler &);
+ RT_API_ATTRS std::uint32_t ReadHeaderOrFooter(std::int64_t frameOffset);
+
+ Lock lock_;
+
+ int unitNumber_{-1};
+ Direction direction_{Direction::Output};
+ bool impliedEndfile_{false}; // sequential/stream output has taken place
+ bool beganReadingRecord_{false};
+ bool anyWriteSinceLastPositioning_{false};
+ bool directAccessRecWasSet_{false}; // REC= appeared
+ // Subtle: The beginning of the frame can't be allowed to advance
+ // during a single list-directed READ due to the possibility of a
+ // multi-record CHARACTER value with a "r*" repeat count. So we
+ // manage the frame and the current record therein separately.
+ std::int64_t frameOffsetInFile_{0};
+ std::size_t recordOffsetInFrame_{0}; // of currentRecordNumber
+ bool swapEndianness_{false};
+ bool createdForInternalChildIo_{false};
+ common::BitSet<64> asyncIdAvailable_[maxAsyncIds / 64];
+
+ // When a synchronous I/O statement is in progress on this unit, holds its
+ // state.
+ std::variant<std::monostate, OpenStatementState, CloseStatementState,
+ ExternalFormattedIoStatementState<Direction::Output>,
+ ExternalFormattedIoStatementState<Direction::Input>,
+ ExternalListIoStatementState<Direction::Output>,
+ ExternalListIoStatementState<Direction::Input>,
+ ExternalUnformattedIoStatementState<Direction::Output>,
+ ExternalUnformattedIoStatementState<Direction::Input>, InquireUnitState,
+ ExternalMiscIoStatementState, ErroneousIoStatementState>
+ u_;
+
+ // Points to the active alternative (if any) in u_ for use as a Cookie
+ Fortran::common::optional<IoStatementState> io_;
+
+ // A stack of child I/O pseudo-units for defined I/O that have this
+ // unit number.
+ OwningPtr<ChildIo> child_;
+};
+
+// A pseudo-unit for child I/O statements in defined I/O subroutines;
+// it forwards operations to the parent I/O statement, which might also
+// be a child I/O statement.
+class ChildIo {
+public:
+ RT_API_ATTRS ChildIo(IoStatementState &parent, OwningPtr<ChildIo> &&previous)
+ : parent_{parent}, previous_{std::move(previous)} {}
+
+ RT_API_ATTRS IoStatementState &parent() const { return parent_; }
+
+ RT_API_ATTRS void EndIoStatement();
+
+ template <typename A, typename... X>
+ RT_API_ATTRS IoStatementState &BeginIoStatement(X &&...xs) {
+ A &state{u_.emplace<A>(std::forward<X>(xs)...)};
+ io_.emplace(state);
+ return *io_;
+ }
+
+ RT_API_ATTRS OwningPtr<ChildIo> AcquirePrevious() {
+ return std::move(previous_);
+ }
+
+ RT_API_ATTRS Iostat CheckFormattingAndDirection(bool unformatted, Direction);
+
+private:
+ IoStatementState &parent_;
+ OwningPtr<ChildIo> previous_;
+ std::variant<std::monostate,
+ ChildFormattedIoStatementState<Direction::Output>,
+ ChildFormattedIoStatementState<Direction::Input>,
+ ChildListIoStatementState<Direction::Output>,
+ ChildListIoStatementState<Direction::Input>,
+ ChildUnformattedIoStatementState<Direction::Output>,
+ ChildUnformattedIoStatementState<Direction::Input>, InquireUnitState,
+ ErroneousIoStatementState, ExternalMiscIoStatementState>
+ u_;
+ Fortran::common::optional<IoStatementState> io_;
+};
+
+RT_OFFLOAD_API_GROUP_END
+
+} // namespace Fortran::runtime::io
+#endif // FLANG_RT_RUNTIME_UNIT_H_
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/utf.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/utf.cpp
new file mode 100644
index 00000000000..ef9df49f24f
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/utf.cpp
@@ -0,0 +1,128 @@
+//===-- lib/runtime/utf.cpp -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang-rt/runtime/utf.h"
+
+namespace Fortran::runtime {
+
+#ifndef FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+// clang-format off
+RT_OFFLOAD_VAR_GROUP_BEGIN
+const RT_CONST_VAR_ATTRS std::uint8_t UTF8FirstByteTable[256]{
+ /* 00 - 7F: 7 bit payload in single byte */
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ /* 80 - BF: invalid first byte, valid later byte */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ /* C0 - DF: 11 bit payload */
+ 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,
+ /* E0 - EF: 16 bit payload */
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ /* F0 - F7: 21 bit payload */ 4, 4, 4, 4, 4, 4, 4, 4,
+ /* F8 - FB: 26 bit payload */ 5, 5, 5, 5,
+ /* FC - FD: 31 bit payload */ 6, 6,
+ /* FE: 32 bit payload */ 7,
+ /* FF: invalid */ 0
+};
+RT_OFFLOAD_VAR_GROUP_END
+// clang-format on
+#endif // FLANG_RUNTIME_NO_GLOBAL_VAR_DEFS
+
+RT_OFFLOAD_API_GROUP_BEGIN
+
+std::size_t MeasurePreviousUTF8Bytes(const char *end, std::size_t limit) {
+ // Scan back over UTF-8 continuation bytes, if any
+ for (std::size_t n{1}; n <= limit; ++n) {
+ if ((end[-n] & 0xc0) != 0x80) {
+ return n;
+ }
+ }
+ return limit;
+}
+
+// Non-minimal encodings are accepted.
+Fortran::common::optional<char32_t> DecodeUTF8(const char *p0) {
+ const std::uint8_t *p{reinterpret_cast<const std::uint8_t *>(p0)};
+ std::size_t bytes{MeasureUTF8Bytes(*p0)};
+ if (bytes == 1) {
+ return char32_t{*p};
+ } else if (bytes > 1) {
+ std::uint64_t result{char32_t{*p} & (0x7f >> bytes)};
+ for (std::size_t j{1}; j < bytes; ++j) {
+ std::uint8_t next{p[j]};
+ if (next < 0x80 || next > 0xbf) {
+ return Fortran::common::nullopt;
+ }
+ result = (result << 6) | (next & 0x3f);
+ }
+ if (result <= 0xffffffff) {
+ return static_cast<char32_t>(result);
+ }
+ }
+ return Fortran::common::nullopt;
+}
+
+std::size_t EncodeUTF8(char *p0, char32_t ucs) {
+ std::uint8_t *p{reinterpret_cast<std::uint8_t *>(p0)};
+ if (ucs <= 0x7f) {
+ p[0] = ucs;
+ return 1;
+ } else if (ucs <= 0x7ff) {
+ p[0] = 0xc0 | (ucs >> 6);
+ p[1] = 0x80 | (ucs & 0x3f);
+ return 2;
+ } else if (ucs <= 0xffff) {
+ p[0] = 0xe0 | (ucs >> 12);
+ p[1] = 0x80 | ((ucs >> 6) & 0x3f);
+ p[2] = 0x80 | (ucs & 0x3f);
+ return 3;
+ } else if (ucs <= 0x1fffff) {
+ p[0] = 0xf0 | (ucs >> 18);
+ p[1] = 0x80 | ((ucs >> 12) & 0x3f);
+ p[2] = 0x80 | ((ucs >> 6) & 0x3f);
+ p[3] = 0x80 | (ucs & 0x3f);
+ return 4;
+ } else if (ucs <= 0x3ffffff) {
+ p[0] = 0xf8 | (ucs >> 24);
+ p[1] = 0x80 | ((ucs >> 18) & 0x3f);
+ p[2] = 0x80 | ((ucs >> 12) & 0x3f);
+ p[3] = 0x80 | ((ucs >> 6) & 0x3f);
+ p[4] = 0x80 | (ucs & 0x3f);
+ return 5;
+ } else if (ucs <= 0x7ffffff) {
+ p[0] = 0xf8 | (ucs >> 30);
+ p[1] = 0x80 | ((ucs >> 24) & 0x3f);
+ p[2] = 0x80 | ((ucs >> 18) & 0x3f);
+ p[3] = 0x80 | ((ucs >> 12) & 0x3f);
+ p[4] = 0x80 | ((ucs >> 6) & 0x3f);
+ p[5] = 0x80 | (ucs & 0x3f);
+ return 6;
+ } else {
+ p[0] = 0xfe;
+ p[1] = 0x80 | ((ucs >> 30) & 0x3f);
+ p[2] = 0x80 | ((ucs >> 24) & 0x3f);
+ p[3] = 0x80 | ((ucs >> 18) & 0x3f);
+ p[4] = 0x80 | ((ucs >> 12) & 0x3f);
+ p[5] = 0x80 | ((ucs >> 6) & 0x3f);
+ p[6] = 0x80 | (ucs & 0x3f);
+ return 7;
+ }
+}
+RT_OFFLOAD_API_GROUP_END
+
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/work-queue.cpp b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/work-queue.cpp
new file mode 100644
index 00000000000..42dbc9064b0
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang-rt/lib/runtime/work-queue.cpp
@@ -0,0 +1,149 @@
+//===-- lib/runtime/work-queue.cpp ------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "flang-rt/runtime/work-queue.h"
+#include "flang-rt/runtime/environment.h"
+#include "flang-rt/runtime/memory.h"
+#include "flang-rt/runtime/type-info.h"
+#include "flang/Common/visit.h"
+
+namespace Fortran::runtime {
+
+#if !defined(RT_DEVICE_COMPILATION)
+// FLANG_RT_DEBUG code is disabled when false.
+static constexpr bool enableDebugOutput{false};
+#endif
+
+RT_OFFLOAD_API_GROUP_BEGIN
+
+RT_API_ATTRS int Ticket::Continue(WorkQueue &workQueue) {
+ if (!begun) {
+ begun = true;
+ return common::visit(
+ [&workQueue](
+ auto &specificTicket) { return specificTicket.Begin(workQueue); },
+ u);
+ } else {
+ return common::visit(
+ [&workQueue](auto &specificTicket) {
+ return specificTicket.Continue(workQueue);
+ },
+ u);
+ }
+}
+
+RT_API_ATTRS WorkQueue::~WorkQueue() {
+ if (anyDynamicAllocation_) {
+ if (last_) {
+ if ((last_->next = firstFree_)) {
+ last_->next->previous = last_;
+ }
+ firstFree_ = first_;
+ first_ = last_ = nullptr;
+ }
+ while (firstFree_) {
+ TicketList *next{firstFree_->next};
+ if (!firstFree_->isStatic) {
+ FreeMemory(firstFree_);
+ }
+ firstFree_ = next;
+ }
+ }
+}
+
+RT_API_ATTRS Ticket &WorkQueue::StartTicket() {
+ if (!firstFree_) {
+ void *p{AllocateMemoryOrCrash(terminator_, sizeof(TicketList))};
+ firstFree_ = new (p) TicketList;
+ firstFree_->isStatic = false;
+ anyDynamicAllocation_ = true;
+ }
+ TicketList *newTicket{firstFree_};
+ if ((firstFree_ = newTicket->next)) {
+ firstFree_->previous = nullptr;
+ }
+ TicketList *after{insertAfter_ ? insertAfter_->next : nullptr};
+ if ((newTicket->previous = insertAfter_ ? insertAfter_ : last_)) {
+ newTicket->previous->next = newTicket;
+ } else {
+ first_ = newTicket;
+ }
+ if ((newTicket->next = after)) {
+ after->previous = newTicket;
+ } else {
+ last_ = newTicket;
+ }
+ newTicket->ticket.begun = false;
+#if !defined(RT_DEVICE_COMPILATION)
+ if (enableDebugOutput &&
+ (executionEnvironment.internalDebugging &
+ ExecutionEnvironment::WorkQueue)) {
+ std::fprintf(stderr, "WQ: new ticket\n");
+ }
+#endif
+ return newTicket->ticket;
+}
+
+RT_API_ATTRS int WorkQueue::Run() {
+ while (last_) {
+ TicketList *at{last_};
+ insertAfter_ = last_;
+#if !defined(RT_DEVICE_COMPILATION)
+ if (enableDebugOutput &&
+ (executionEnvironment.internalDebugging &
+ ExecutionEnvironment::WorkQueue)) {
+ std::fprintf(stderr, "WQ: %zd %s\n", at->ticket.u.index(),
+ at->ticket.begun ? "Continue" : "Begin");
+ }
+#endif
+ int stat{at->ticket.Continue(*this)};
+#if !defined(RT_DEVICE_COMPILATION)
+ if (enableDebugOutput &&
+ (executionEnvironment.internalDebugging &
+ ExecutionEnvironment::WorkQueue)) {
+ std::fprintf(stderr, "WQ: ... stat %d\n", stat);
+ }
+#endif
+ insertAfter_ = nullptr;
+ if (stat == StatOk) {
+ if (at->previous) {
+ at->previous->next = at->next;
+ } else {
+ first_ = at->next;
+ }
+ if (at->next) {
+ at->next->previous = at->previous;
+ } else {
+ last_ = at->previous;
+ }
+ if ((at->next = firstFree_)) {
+ at->next->previous = at;
+ }
+ at->previous = nullptr;
+ firstFree_ = at;
+ } else if (stat != StatContinue) {
+ Stop();
+ return stat;
+ }
+ }
+ return StatOk;
+}
+
+RT_API_ATTRS void WorkQueue::Stop() {
+ if (last_) {
+ if ((last_->next = firstFree_)) {
+ last_->next->previous = last_;
+ }
+ firstFree_ = first_;
+ first_ = last_ = nullptr;
+ }
+}
+
+RT_OFFLOAD_API_GROUP_END
+
+} // namespace Fortran::runtime
diff --git a/contrib/libs/llvm/flang-rt/flang/LICENSE.TXT b/contrib/libs/llvm/flang-rt/flang/LICENSE.TXT
new file mode 100644
index 00000000000..53bb2e7fbc7
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/LICENSE.TXT
@@ -0,0 +1,234 @@
+==============================================================================
+The LLVM Project is under the Apache License v2.0 with LLVM Exceptions:
+==============================================================================
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+---- LLVM Exceptions to the Apache 2.0 License ----
+
+As an exception, if, as a result of your compiling your source code, portions
+of this Software are embedded into an Object form of such source code, you
+may redistribute such embedded portions in such Object form without complying
+with the conditions of Sections 4(a), 4(b) and 4(d) of the License.
+
+In addition, if you combine or link compiled forms of this Software with
+software that is licensed under the GPLv2 ("Combined Software") and if a
+court of competent jurisdiction determines that the patent provision (Section
+3), the indemnity provision (Section 9) or other Section of the License
+conflicts with the conditions of the GPLv2, you may retroactively and
+prospectively choose to deem waived or otherwise exclude such Section(s) of
+the License, but only in their entirety and only with respect to the Combined
+Software.
+
+==============================================================================
+Software from third parties included in the LLVM Project:
+==============================================================================
+The LLVM Project contains third party software which is under different license
+terms. All such code will be identified clearly using at least one of two
+mechanisms:
+1) It will be in a separate directory tree with its own `LICENSE.txt` or
+ `LICENSE` file at the top containing the specific license and restrictions
+ which apply to that software, or
+2) It will contain specific license and restriction terms at the top of every
+ file.
diff --git a/contrib/libs/llvm/flang-rt/flang/README.md b/contrib/libs/llvm/flang-rt/flang/README.md
new file mode 100644
index 00000000000..2d5435196bb
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/README.md
@@ -0,0 +1,42 @@
+# Flang
+
+Flang is a ground-up implementation of a Fortran front end written in modern
+C++. It started off as the f18 project (https://github.com/flang-compiler/f18)
+with an aim to replace the previous flang project
+(https://github.com/flang-compiler/flang) and address its various deficiencies.
+F18 was subsequently accepted into the LLVM project and rechristened as Flang.
+
+Please note that flang is not ready yet for production usage.
+
+## Getting Started
+
+Read more about flang in the [docs directory](docs).
+Start with the [compiler overview](docs/Overview.md).
+
+To better understand Fortran as a language
+and the specific grammar accepted by flang,
+read [Fortran For C Programmers](docs/FortranForCProgrammers.md)
+and
+flang's specifications of the [Fortran grammar](docs/f2018-grammar.md)
+and
+the [OpenMP grammar](docs/OpenMP-4.5-grammar.md).
+
+Treatment of language extensions is covered
+in [this document](docs/Extensions.md).
+
+To understand the compilers handling of intrinsics,
+see the [discussion of intrinsics](docs/Intrinsics.md).
+
+To understand how a flang program communicates with libraries at runtime,
+see the discussion of [runtime descriptors](docs/RuntimeDescriptor.md).
+
+If you're interested in contributing to the compiler,
+read the [style guide](docs/C++style.md)
+and
+also review [how flang uses modern C++ features](docs/C++17.md).
+
+If you are interested in writing new documentation, follow
+[LLVM's Markdown style guide](https://github.com/llvm/llvm-project/blob/main/llvm/docs/MarkdownQuickstartTemplate.md).
+
+Consult the [Getting Started with Flang](docs/GettingStarted.md)
+for information on building and running flang.
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/Fortran-consts.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/Fortran-consts.h
new file mode 100644
index 00000000000..74ef1c85d2c
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/Fortran-consts.h
@@ -0,0 +1,46 @@
+//===-- include/flang/Common/Fortran-consts.h -------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_COMMON_FORTRAN_CONSTS_H_
+#define FORTRAN_COMMON_FORTRAN_CONSTS_H_
+
+#include "enum-class.h"
+#include <cstdint>
+
+namespace Fortran::common {
+
+// Fortran has five kinds of standard intrinsic data types, the Unsigned
+// extension, and derived types.
+ENUM_CLASS(
+ TypeCategory, Integer, Unsigned, Real, Complex, Character, Logical, Derived)
+ENUM_CLASS(VectorElementCategory, Integer, Unsigned, Real)
+
+ENUM_CLASS(IoStmtKind, None, Backspace, Close, Endfile, Flush, Inquire, Open,
+ Print, Read, Rewind, Wait, Write)
+
+// Defined I/O variants
+ENUM_CLASS(
+ DefinedIo, ReadFormatted, ReadUnformatted, WriteFormatted, WriteUnformatted)
+
+// Fortran arrays may have up to 15 dimensions (See Fortran 2018 section 5.4.6).
+static constexpr int maxRank{15};
+
+// Floating-point rounding modes; these are packed into a byte to save
+// room in the runtime's format processing context structure. These
+// enumerators are defined with the corresponding values returned from
+// llvm.get.rounding.
+enum class RoundingMode : std::uint8_t {
+ ToZero, // ROUND=ZERO, RZ - truncation
+ TiesToEven, // ROUND=NEAREST, RN - default IEEE rounding
+ Up, // ROUND=UP, RU
+ Down, // ROUND=DOWN, RD
+ TiesAwayFromZero, // ROUND=COMPATIBLE, RC - ties round away from zero
+};
+
+} // namespace Fortran::common
+#endif /* FORTRAN_COMMON_FORTRAN_CONSTS_H_ */
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/ISO_Fortran_binding_wrapper.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/ISO_Fortran_binding_wrapper.h
new file mode 100644
index 00000000000..890522953ef
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/ISO_Fortran_binding_wrapper.h
@@ -0,0 +1,38 @@
+/*===-- include/flang/Common/ISO_Fortran_binding_wrapper.h --------*- C++ -*-===
+ *
+ * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+ * See https://llvm.org/LICENSE.txt for license information.
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ *
+ *===----------------------------------------------------------------------===*/
+
+#ifndef FORTRAN_COMMON_ISO_FORTRAN_BINDING_WRAPPER_H_
+#define FORTRAN_COMMON_ISO_FORTRAN_BINDING_WRAPPER_H_
+
+/* A thin wrapper around flang/include/ISO_Fortran_binding.h
+ * This header file must be included when ISO_Fortran_binding.h
+ * definitions/declarations are needed in Flang compiler/runtime
+ * sources. The inclusion of Common/api-attrs.h below sets up
+ * proper values for the macros used in ISO_Fortran_binding.h
+ * for the device offload builds.
+ * flang/include/ISO_Fortran_binding.h is made a standalone
+ * header file so that it can be used on its own in users'
+ * C/C++ programs.
+ */
+
+/* clang-format off */
+#include <stddef.h>
+#include "api-attrs.h"
+#ifdef __cplusplus
+namespace Fortran {
+namespace ISO {
+#define FORTRAN_ISO_NAMESPACE_ ::Fortran::ISO
+#endif /* __cplusplus */
+#include "flang/ISO_Fortran_binding.h"
+#ifdef __cplusplus
+} // namespace ISO
+} // namespace Fortran
+#endif /* __cplusplus */
+/* clang-format on */
+
+#endif /* FORTRAN_COMMON_ISO_FORTRAN_BINDING_WRAPPER_H_ */
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/api-attrs.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/api-attrs.h
new file mode 100644
index 00000000000..fd524ee34cc
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/api-attrs.h
@@ -0,0 +1,209 @@
+/*===-- include/flang/Common/api-attrs.h ---------------------------*- C -*-=//
+ *
+ * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+ * See https://llvm.org/LICENSE.txt for license information.
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ *
+ *===------------------------------------------------------------------------===
+ */
+
+/*
+ * The file defines a set macros that can be used to apply
+ * different attributes/pragmas to functions/variables
+ * declared/defined/used in Flang runtime library.
+ */
+
+#ifndef FORTRAN_RUNTIME_API_ATTRS_H_
+#define FORTRAN_RUNTIME_API_ATTRS_H_
+
+/*
+ * RT_EXT_API_GROUP_BEGIN/END pair is placed around definitions
+ * of functions exported by Flang runtime library. They are the entry
+ * points that are referenced in the Flang generated code.
+ * The macros may be expanded into any construct that is valid to appear
+ * at C++ module scope.
+ */
+#ifndef RT_EXT_API_GROUP_BEGIN
+#if defined(OMP_NOHOST_BUILD)
+#define RT_EXT_API_GROUP_BEGIN \
+ _Pragma("omp begin declare target device_type(nohost)")
+#elif defined(OMP_OFFLOAD_BUILD)
+#define RT_EXT_API_GROUP_BEGIN _Pragma("omp declare target")
+#else
+#define RT_EXT_API_GROUP_BEGIN
+#endif
+#endif /* !defined(RT_EXT_API_GROUP_BEGIN) */
+
+#ifndef RT_EXT_API_GROUP_END
+#if defined(OMP_NOHOST_BUILD) || defined(OMP_OFFLOAD_BUILD)
+#define RT_EXT_API_GROUP_END _Pragma("omp end declare target")
+#else
+#define RT_EXT_API_GROUP_END
+#endif
+#endif /* !defined(RT_EXT_API_GROUP_END) */
+
+/*
+ * RT_OFFLOAD_API_GROUP_BEGIN/END pair is placed around definitions
+ * of functions that can be referenced in other modules of Flang
+ * runtime. For OpenMP offload, these functions are made "declare target"
+ * making sure they are compiled for the target even though direct
+ * references to them from other "declare target" functions may not
+ * be seen. Host-only functions should not be put in between these
+ * two macros.
+ */
+#define RT_OFFLOAD_API_GROUP_BEGIN RT_EXT_API_GROUP_BEGIN
+#define RT_OFFLOAD_API_GROUP_END RT_EXT_API_GROUP_END
+
+/*
+ * RT_OFFLOAD_VAR_GROUP_BEGIN/END pair is placed around definitions
+ * of variables (e.g. globals or static class members) that can be
+ * referenced in functions marked with RT_OFFLOAD_API_GROUP_BEGIN/END.
+ * For OpenMP offload, these variables are made "declare target".
+ */
+#define RT_OFFLOAD_VAR_GROUP_BEGIN RT_EXT_API_GROUP_BEGIN
+#define RT_OFFLOAD_VAR_GROUP_END RT_EXT_API_GROUP_END
+
+/*
+ * RT_VAR_GROUP_BEGIN/END pair is placed around definitions
+ * of module scope variables referenced by Flang runtime (directly
+ * or indirectly).
+ * The macros may be expanded into any construct that is valid to appear
+ * at C++ module scope.
+ */
+#ifndef RT_VAR_GROUP_BEGIN
+#define RT_VAR_GROUP_BEGIN RT_EXT_API_GROUP_BEGIN
+#endif /* !defined(RT_VAR_GROUP_BEGIN) */
+
+#ifndef RT_VAR_GROUP_END
+#define RT_VAR_GROUP_END RT_EXT_API_GROUP_END
+#endif /* !defined(RT_VAR_GROUP_END) */
+
+/*
+ * Each non-exported function used by Flang runtime (e.g. via
+ * calling it or taking its address, etc.) is marked with
+ * RT_API_ATTRS. The macros is placed at both declaration and
+ * definition of such a function.
+ * The macros may be expanded into a construct that is valid
+ * to appear as part of a C++ decl-specifier.
+ */
+#ifndef RT_API_ATTRS
+#if defined(__CUDACC__) || defined(__CUDA__)
+#define RT_API_ATTRS __host__ __device__
+#else
+#define RT_API_ATTRS
+#endif
+#endif /* !defined(RT_API_ATTRS) */
+
+/*
+ * Each const/constexpr module scope variable referenced by Flang runtime
+ * (directly or indirectly) is marked with RT_CONST_VAR_ATTRS.
+ * The macros is placed at both declaration and definition of such a variable.
+ * The macros may be expanded into a construct that is valid
+ * to appear as part of a C++ decl-specifier.
+ */
+#ifndef RT_CONST_VAR_ATTRS
+#if (defined(__CUDACC__) || defined(__CUDA__)) && defined(__CUDA_ARCH__)
+#define RT_CONST_VAR_ATTRS __constant__
+#else
+#define RT_CONST_VAR_ATTRS
+#endif
+#endif /* !defined(RT_CONST_VAR_ATTRS) */
+
+/*
+ * RT_VAR_ATTRS is marking non-const/constexpr module scope variables
+ * referenced by Flang runtime.
+ */
+#ifndef RT_VAR_ATTRS
+#if (defined(__CUDACC__) || defined(__CUDA__)) && defined(__CUDA_ARCH__)
+#define RT_VAR_ATTRS __device__
+#else
+#define RT_VAR_ATTRS
+#endif
+#endif /* !defined(RT_VAR_ATTRS) */
+
+/*
+ * RT_DEVICE_COMPILATION is defined for any device compilation.
+ * Note that it can only be used reliably with compilers that perform
+ * separate host and device compilations.
+ */
+#if ((defined(__CUDACC__) || defined(__CUDA__)) && defined(__CUDA_ARCH__)) || \
+ (defined(_OPENMP) && (defined(__AMDGCN__) || defined(__NVPTX__)))
+#define RT_DEVICE_COMPILATION 1
+#else
+#undef RT_DEVICE_COMPILATION
+#endif
+
+/*
+ * Recurrence in the call graph prevents computing minimal stack size
+ * required for a kernel execution. This macro can be used to disable
+ * some F18 runtime functionality that is implemented using recurrent
+ * function calls or to use alternative implementation.
+ */
+#if (defined(__CUDACC__) || defined(__CUDA__)) && defined(__CUDA_ARCH__)
+#define RT_DEVICE_AVOID_RECURSION 1
+#else
+#undef RT_DEVICE_AVOID_RECURSION
+#endif
+
+#if defined(__CUDACC__)
+#define RT_DIAG_PUSH _Pragma("nv_diagnostic push")
+#define RT_DIAG_POP _Pragma("nv_diagnostic pop")
+#define RT_DIAG_DISABLE_CALL_HOST_FROM_DEVICE_WARN \
+ _Pragma("nv_diag_suppress 20011") _Pragma("nv_diag_suppress 20014")
+#else /* !defined(__CUDACC__) */
+#define RT_DIAG_PUSH
+#define RT_DIAG_POP
+#define RT_DIAG_DISABLE_CALL_HOST_FROM_DEVICE_WARN
+#endif /* !defined(__CUDACC__) */
+
+/*
+ * RT_DEVICE_NOINLINE may be used for non-performance critical
+ * functions that should not be inlined to minimize the amount
+ * of code that needs to be processed by the device compiler's
+ * optimizer.
+ */
+#ifndef __has_attribute
+#define __has_attribute(x) 0
+#endif
+#if __has_attribute(noinline)
+#define RT_NOINLINE_ATTR __attribute__((noinline))
+#else
+#define RT_NOINLINE_ATTR
+#endif
+#if (defined(__CUDACC__) || defined(__CUDA__)) && defined(__CUDA_ARCH__)
+#define RT_DEVICE_NOINLINE RT_NOINLINE_ATTR
+#define RT_DEVICE_NOINLINE_HOST_INLINE
+#else
+#define RT_DEVICE_NOINLINE
+#define RT_DEVICE_NOINLINE_HOST_INLINE inline
+#endif
+
+/* RT_OPTNONE_ATTR allows disabling optimizations per function. */
+#if __has_attribute(optimize)
+/* GCC style. */
+#define RT_OPTNONE_ATTR __attribute__((optimize("O0")))
+#elif __has_attribute(optnone)
+/* Clang style. */
+#define RT_OPTNONE_ATTR __attribute__((optnone))
+#else
+#define RT_OPTNONE_ATTR
+#endif
+
+/* Detect system endianness if it was not explicitly set. */
+#if !defined(FLANG_LITTLE_ENDIAN) && !defined(FLANG_BIG_ENDIAN)
+
+/* We always assume Windows is little endian, otherwise use the GCC compatible
+ * flags. */
+#if defined(_MSC_VER) || defined(_WIN32)
+#define FLANG_LITTLE_ENDIAN 1
+#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
+#define FLANG_LITTLE_ENDIAN 1
+#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
+#define FLANG_BIG_ENDIAN 1
+#else
+#error "Unknown or unsupported endianness."
+#endif
+
+#endif /* !defined(FLANG_LITTLE_ENDIAN) && !defined(FLANG_BIG_ENDIAN) */
+
+#endif /* !FORTRAN_RUNTIME_API_ATTRS_H_ */
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/bit-population-count.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/bit-population-count.h
new file mode 100644
index 00000000000..e1aeb78f9a3
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/bit-population-count.h
@@ -0,0 +1,96 @@
+//===-- include/flang/Common/bit-population-count.h -------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_COMMON_BIT_POPULATION_COUNT_H_
+#define FORTRAN_COMMON_BIT_POPULATION_COUNT_H_
+
+// Fast and portable functions that implement Fortran's POPCNT and POPPAR
+// intrinsic functions. POPCNT returns the number of bits that are set (1)
+// in its argument. POPPAR is a parity function that returns true
+// when POPCNT is odd.
+
+#include <climits>
+#include <type_traits>
+
+namespace Fortran::common {
+
+template <typename INT,
+ std::enable_if_t<(sizeof(INT) > 4 && sizeof(INT) <= 8), int> = 0>
+inline constexpr int BitPopulationCount(INT x) {
+ // In each of the 32 2-bit fields, count the bits that were present.
+ // This leaves a value [0..2] in each of these 2-bit fields.
+ x = (x & 0x5555555555555555) + ((x >> 1) & 0x5555555555555555);
+ // Combine into 16 4-bit fields, each holding [0..4]
+ x = (x & 0x3333333333333333) + ((x >> 2) & 0x3333333333333333);
+ // Now 8 8-bit fields, each with [0..8] in their lower 4 bits.
+ x = (x & 0x0f0f0f0f0f0f0f0f) + ((x >> 4) & 0x0f0f0f0f0f0f0f0f);
+ // Now 4 16-bit fields, each with [0..16] in their lower 5 bits.
+ x = (x & 0x001f001f001f001f) + ((x >> 8) & 0x001f001f001f001f);
+ // Now 2 32-bit fields, each with [0..32] in their lower 6 bits.
+ x = (x & 0x0000003f0000003f) + ((x >> 16) & 0x0000003f0000003f);
+ // Last step: 1 64-bit field, with [0..64]
+ return (x & 0x7f) + (x >> 32);
+}
+
+template <typename INT,
+ std::enable_if_t<(sizeof(INT) > 2 && sizeof(INT) <= 4), int> = 0>
+inline constexpr int BitPopulationCount(INT x) {
+ // In each of the 16 2-bit fields, count the bits that were present.
+ // This leaves a value [0..2] in each of these 2-bit fields.
+ x = (x & 0x55555555) + ((x >> 1) & 0x55555555);
+ // Combine into 8 4-bit fields, each holding [0..4]
+ x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
+ // Now 4 8-bit fields, each with [0..8] in their lower 4 bits.
+ x = (x & 0x0f0f0f0f) + ((x >> 4) & 0x0f0f0f0f);
+ // Now 2 16-bit fields, each with [0..16] in their lower 5 bits.
+ x = (x & 0x001f001f) + ((x >> 8) & 0x001f001f);
+ // Last step: 1 32-bit field, with [0..32]
+ return (x & 0x3f) + (x >> 16);
+}
+
+template <typename INT, std::enable_if_t<sizeof(INT) == 2, int> = 0>
+inline constexpr int BitPopulationCount(INT x) {
+ // In each of the 8 2-bit fields, count the bits that were present.
+ // This leaves a value [0..2] in each of these 2-bit fields.
+ x = (x & 0x5555) + ((x >> 1) & 0x5555);
+ // Combine into 4 4-bit fields, each holding [0..4]
+ x = (x & 0x3333) + ((x >> 2) & 0x3333);
+ // Now 2 8-bit fields, each with [0..8] in their lower 4 bits.
+ x = (x & 0x0f0f) + ((x >> 4) & 0x0f0f);
+ // Last step: 1 16-bit field, with [0..16]
+ return (x & 0x1f) + (x >> 8);
+}
+
+template <typename INT, std::enable_if_t<sizeof(INT) == 1, int> = 0>
+inline constexpr int BitPopulationCount(INT x) {
+ // In each of the 4 2-bit fields, count the bits that were present.
+ // This leaves a value [0..2] in each of these 2-bit fields.
+ x = (x & 0x55) + ((x >> 1) & 0x55);
+ // Combine into 2 4-bit fields, each holding [0..4]
+ x = (x & 0x33) + ((x >> 2) & 0x33);
+ // Last step: 1 8-bit field, with [0..8]
+ return (x & 0xf) + (x >> 4);
+}
+
+template <typename INT> inline constexpr bool Parity(INT x) {
+ return BitPopulationCount(x) & 1;
+}
+
+// "Parity is for farmers." -- Seymour R. Cray
+
+template <typename INT> inline constexpr int TrailingZeroBitCount(INT x) {
+ if ((x & 1) != 0) {
+ return 0; // fast path for odd values
+ } else if (x == 0) {
+ return CHAR_BIT * sizeof x;
+ } else {
+ return BitPopulationCount(static_cast<INT>(x ^ (x - 1))) - 1;
+ }
+}
+} // namespace Fortran::common
+#endif // FORTRAN_COMMON_BIT_POPULATION_COUNT_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/constexpr-bitset.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/constexpr-bitset.h
new file mode 100644
index 00000000000..1aafb6eff84
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/constexpr-bitset.h
@@ -0,0 +1,147 @@
+//===-- include/flang/Common/constexpr-bitset.h -----------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_COMMON_CONSTEXPR_BITSET_H_
+#define FORTRAN_COMMON_CONSTEXPR_BITSET_H_
+
+// Implements a replacement for std::bitset<> that is suitable for use
+// in constexpr expressions. Limited to elements in [0..127].
+
+#include "bit-population-count.h"
+#include "uint128.h"
+#include <cstddef>
+#include <cstdint>
+#include <initializer_list>
+#include <optional>
+#include <type_traits>
+
+namespace Fortran::common {
+
+template <int BITS> class BitSet {
+ static_assert(BITS > 0 && BITS <= 128);
+ using Word = HostUnsignedIntType<(BITS <= 32 ? 32 : BITS)>;
+ static constexpr Word allBits{
+ ~static_cast<Word>(0) >> (8 * sizeof(Word) - BITS)};
+
+ constexpr BitSet(Word b) : bits_{b} {}
+
+public:
+ constexpr BitSet() {}
+ constexpr BitSet(const std::initializer_list<int> &xs) {
+ for (auto x : xs) {
+ set(x);
+ }
+ }
+ constexpr BitSet(const BitSet &) = default;
+ constexpr BitSet(BitSet &&) = default;
+ constexpr BitSet &operator=(const BitSet &) = default;
+ constexpr BitSet &operator=(BitSet &&) = default;
+
+ constexpr BitSet &operator&=(const BitSet &that) {
+ bits_ &= that.bits_;
+ return *this;
+ }
+ constexpr BitSet &operator&=(BitSet &&that) {
+ bits_ &= that.bits_;
+ return *this;
+ }
+ constexpr BitSet &operator^=(const BitSet &that) {
+ bits_ ^= that.bits_;
+ return *this;
+ }
+ constexpr BitSet &operator^=(BitSet &&that) {
+ bits_ ^= that.bits_;
+ return *this;
+ }
+ constexpr BitSet &operator|=(const BitSet &that) {
+ bits_ |= that.bits_;
+ return *this;
+ }
+ constexpr BitSet &operator|=(BitSet &&that) {
+ bits_ |= that.bits_;
+ return *this;
+ }
+
+ constexpr BitSet operator~() const { return ~bits_; }
+ constexpr BitSet operator&(const BitSet &that) const {
+ return bits_ & that.bits_;
+ }
+ constexpr BitSet operator&(BitSet &&that) const { return bits_ & that.bits_; }
+ constexpr BitSet operator^(const BitSet &that) const {
+ return bits_ ^ that.bits_;
+ }
+ constexpr BitSet operator^(BitSet &&that) const { return bits_ & that.bits_; }
+ constexpr BitSet operator|(const BitSet &that) const {
+ return bits_ | that.bits_;
+ }
+ constexpr BitSet operator|(BitSet &&that) const { return bits_ | that.bits_; }
+
+ constexpr bool operator==(const BitSet &that) const {
+ return bits_ == that.bits_;
+ }
+ constexpr bool operator==(BitSet &&that) const { return bits_ == that.bits_; }
+ constexpr bool operator!=(const BitSet &that) const {
+ return bits_ != that.bits_;
+ }
+ constexpr bool operator!=(BitSet &&that) const { return bits_ != that.bits_; }
+
+ static constexpr std::size_t size() { return BITS; }
+ constexpr bool test(std::size_t x) const {
+ return x < BITS && ((bits_ >> x) & 1) != 0;
+ }
+
+ constexpr bool all() const { return bits_ == allBits; }
+ constexpr bool any() const { return bits_ != 0; }
+ constexpr bool none() const { return bits_ == 0; }
+
+ constexpr std::size_t count() const { return BitPopulationCount(bits_); }
+
+ constexpr BitSet &set() {
+ bits_ = allBits;
+ return *this;
+ }
+ constexpr BitSet set(std::size_t x, bool value = true) {
+ if (!value) {
+ return reset(x);
+ } else {
+ bits_ |= static_cast<Word>(1) << x;
+ return *this;
+ }
+ }
+ constexpr BitSet &reset() {
+ bits_ = 0;
+ return *this;
+ }
+ constexpr BitSet &reset(std::size_t x) {
+ bits_ &= ~(static_cast<Word>(1) << x);
+ return *this;
+ }
+ constexpr BitSet &flip() {
+ bits_ ^= allBits;
+ return *this;
+ }
+ constexpr BitSet &flip(std::size_t x) {
+ bits_ ^= static_cast<Word>(1) << x;
+ return *this;
+ }
+
+ constexpr std::optional<std::size_t> LeastElement() const {
+ if (bits_ == 0) {
+ return std::nullopt;
+ } else {
+ return {TrailingZeroBitCount(bits_)};
+ }
+ }
+
+ Word bits() const { return bits_; }
+
+private:
+ Word bits_{0};
+};
+} // namespace Fortran::common
+#endif // FORTRAN_COMMON_CONSTEXPR_BITSET_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/enum-class.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/enum-class.h
new file mode 100644
index 00000000000..9f9134ee3ff
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/enum-class.h
@@ -0,0 +1,79 @@
+//===-- include/flang/Common/enum-class.h -----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// The macro
+// ENUM_CLASS(className, enum1, enum2, ..., enumN)
+// defines
+// enum class className { enum1, enum2, ... , enumN };
+// as well as the introspective utilities
+// static constexpr std::size_t className_enumSize{N};
+// static inline std::string_view EnumToString(className);
+
+#ifndef FORTRAN_COMMON_ENUM_CLASS_H_
+#define FORTRAN_COMMON_ENUM_CLASS_H_
+
+#include <array>
+#include <functional>
+#include <string_view>
+namespace Fortran::common {
+
+constexpr std::size_t CountEnumNames(const char *p) {
+ std::size_t n{0};
+ std::size_t any{0};
+ for (; *p; ++p) {
+ if (*p == ',') {
+ n += any;
+ any = 0;
+ } else if (*p != ' ') {
+ any = 1;
+ }
+ }
+ return n + any;
+}
+
+template <std::size_t ITEMS>
+constexpr std::array<std::string_view, ITEMS> EnumNames(const char *p) {
+ std::array<std::string_view, ITEMS> result{""};
+ std::size_t at{0};
+ const char *start{nullptr};
+ for (; *p; ++p) {
+ if (*p == ',' || *p == ' ') {
+ if (start) {
+ result[at++] =
+ std::string_view{start, static_cast<std::size_t>(p - start)};
+ start = nullptr;
+ }
+ } else if (!start) {
+ start = p;
+ }
+ }
+ if (start) {
+ result[at] = std::string_view{start, static_cast<std::size_t>(p - start)};
+ }
+ return result;
+}
+
+#define ENUM_CLASS(NAME, ...) \
+ enum class NAME { __VA_ARGS__ }; \
+ [[maybe_unused]] static constexpr std::size_t NAME##_enumSize{ \
+ ::Fortran::common::CountEnumNames(#__VA_ARGS__)}; \
+ [[maybe_unused]] static inline std::size_t EnumToInt(NAME e) { \
+ return static_cast<std::size_t>(e); \
+ } \
+ [[maybe_unused]] static inline std::string_view EnumToString(NAME e) { \
+ static const constexpr auto names{ \
+ ::Fortran::common::EnumNames<NAME##_enumSize>(#__VA_ARGS__)}; \
+ return names[static_cast<std::size_t>(e)]; \
+ } \
+ [[maybe_unused]] inline void ForEach##NAME(std::function<void(NAME)> f) { \
+ for (std::size_t i{0}; i < NAME##_enumSize; ++i) { \
+ f(static_cast<NAME>(i)); \
+ } \
+ }
+} // namespace Fortran::common
+#endif // FORTRAN_COMMON_ENUM_CLASS_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/enum-set.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/enum-set.h
new file mode 100644
index 00000000000..5290b76debe
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/enum-set.h
@@ -0,0 +1,231 @@
+//===-- include/flang/Common/enum-set.h -------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_COMMON_ENUM_SET_H_
+#define FORTRAN_COMMON_ENUM_SET_H_
+
+// Implements a set of enums as a std::bitset<>. APIs from bitset<> and set<>
+// can be used on these sets, whichever might be more clear to the user.
+// This class template facilitates the use of the more type-safe C++ "enum
+// class" feature without loss of convenience.
+
+#include "constexpr-bitset.h"
+#include "idioms.h"
+#include <bitset>
+#include <cstddef>
+#include <initializer_list>
+#include <optional>
+#include <string>
+#include <type_traits>
+
+namespace Fortran::common {
+
+template <typename ENUM, std::size_t BITS> class EnumSet {
+ static_assert(BITS > 0);
+
+public:
+ // When the bitset fits in a word, use a custom local bitset class that is
+ // more amenable to constexpr evaluation than the current std::bitset<>.
+ using bitsetType =
+ std::conditional_t<(BITS <= 64), common::BitSet<BITS>, std::bitset<BITS>>;
+ using enumerationType = ENUM;
+
+ constexpr EnumSet() {}
+ constexpr EnumSet(const std::initializer_list<enumerationType> &enums) {
+ for (auto it{enums.begin()}; it != enums.end(); ++it) {
+ set(*it);
+ }
+ }
+ constexpr EnumSet(const EnumSet &) = default;
+ constexpr EnumSet(EnumSet &&) = default;
+
+ constexpr EnumSet &operator=(const EnumSet &) = default;
+ constexpr EnumSet &operator=(EnumSet &&) = default;
+
+ const bitsetType &bitset() const { return bitset_; }
+
+ constexpr EnumSet &operator&=(const EnumSet &that) {
+ bitset_ &= that.bitset_;
+ return *this;
+ }
+ constexpr EnumSet &operator&=(EnumSet &&that) {
+ bitset_ &= that.bitset_;
+ return *this;
+ }
+ constexpr EnumSet &operator|=(const EnumSet &that) {
+ bitset_ |= that.bitset_;
+ return *this;
+ }
+ constexpr EnumSet &operator|=(EnumSet &&that) {
+ bitset_ |= that.bitset_;
+ return *this;
+ }
+ constexpr EnumSet &operator^=(const EnumSet &that) {
+ bitset_ ^= that.bitset_;
+ return *this;
+ }
+ constexpr EnumSet &operator^=(EnumSet &&that) {
+ bitset_ ^= that.bitset_;
+ return *this;
+ }
+
+ constexpr EnumSet operator~() const {
+ EnumSet result;
+ result.bitset_ = ~bitset_;
+ return result;
+ }
+ constexpr EnumSet operator&(const EnumSet &that) const {
+ EnumSet result{*this};
+ result.bitset_ &= that.bitset_;
+ return result;
+ }
+ constexpr EnumSet operator&(EnumSet &&that) const {
+ EnumSet result{*this};
+ result.bitset_ &= that.bitset_;
+ return result;
+ }
+ constexpr EnumSet operator|(const EnumSet &that) const {
+ EnumSet result{*this};
+ result.bitset_ |= that.bitset_;
+ return result;
+ }
+ constexpr EnumSet operator|(EnumSet &&that) const {
+ EnumSet result{*this};
+ result.bitset_ |= that.bitset_;
+ return result;
+ }
+ constexpr EnumSet operator^(const EnumSet &that) const {
+ EnumSet result{*this};
+ result.bitset_ ^= that.bitset_;
+ return result;
+ }
+ constexpr EnumSet operator^(EnumSet &&that) const {
+ EnumSet result{*this};
+ result.bitset_ ^= that.bitset_;
+ return result;
+ }
+
+ constexpr EnumSet operator+(enumerationType v) const {
+ return {*this | EnumSet{v}};
+ }
+ constexpr EnumSet operator-(enumerationType v) const {
+ return {*this & ~EnumSet{v}};
+ }
+
+ constexpr bool operator==(const EnumSet &that) const {
+ return bitset_ == that.bitset_;
+ }
+ constexpr bool operator==(EnumSet &&that) const {
+ return bitset_ == that.bitset_;
+ }
+ constexpr bool operator!=(const EnumSet &that) const {
+ return bitset_ != that.bitset_;
+ }
+ constexpr bool operator!=(EnumSet &&that) const {
+ return bitset_ != that.bitset_;
+ }
+
+ // N.B. std::bitset<> has size() for max_size(), but that's not the same
+ // thing as std::set<>::size(), which is an element count.
+ static constexpr std::size_t max_size() { return BITS; }
+ constexpr bool test(enumerationType x) const {
+ return bitset_.test(static_cast<std::size_t>(x));
+ }
+ constexpr bool all() const { return bitset_.all(); }
+ constexpr bool any() const { return bitset_.any(); }
+ constexpr bool none() const { return bitset_.none(); }
+
+ // N.B. std::bitset<> has count() as an element count, while
+ // std::set<>::count(x) returns 0 or 1 to indicate presence.
+ constexpr std::size_t count() const { return bitset_.count(); }
+ constexpr std::size_t count(enumerationType x) const {
+ return test(x) ? 1 : 0;
+ }
+
+ constexpr EnumSet &set() {
+ bitset_.set();
+ return *this;
+ }
+ constexpr EnumSet &set(enumerationType x, bool value = true) {
+ bitset_.set(static_cast<std::size_t>(x), value);
+ return *this;
+ }
+ constexpr EnumSet &reset() {
+ bitset_.reset();
+ return *this;
+ }
+ constexpr EnumSet &reset(enumerationType x) {
+ bitset_.reset(static_cast<std::size_t>(x));
+ return *this;
+ }
+ constexpr EnumSet &flip() {
+ bitset_.flip();
+ return *this;
+ }
+ constexpr EnumSet &flip(enumerationType x) {
+ bitset_.flip(static_cast<std::size_t>(x));
+ return *this;
+ }
+
+ constexpr bool empty() const { return none(); }
+ void clear() { reset(); }
+ void insert(enumerationType x) { set(x); }
+ void insert(enumerationType &&x) { set(x); }
+ void emplace(enumerationType &&x) { set(x); }
+ void erase(enumerationType x) { reset(x); }
+ void erase(enumerationType &&x) { reset(x); }
+
+ constexpr std::optional<enumerationType> LeastElement() const {
+ if (empty()) {
+ return std::nullopt;
+ } else if constexpr (std::is_same_v<bitsetType, common::BitSet<BITS>>) {
+ return {static_cast<enumerationType>(bitset_.LeastElement().value())};
+ } else {
+ // std::bitset: just iterate
+ for (std::size_t j{0}; j < BITS; ++j) {
+ auto enumerator{static_cast<enumerationType>(j)};
+ if (bitset_.test(j)) {
+ return {enumerator};
+ }
+ }
+ die("EnumSet::LeastElement(): no bit found in non-empty std::bitset");
+ }
+ }
+
+ template <typename FUNC> void IterateOverMembers(const FUNC &f) const {
+ EnumSet copy{*this};
+ while (auto least{copy.LeastElement()}) {
+ f(*least);
+ copy.erase(*least);
+ }
+ }
+
+ template <typename STREAM>
+ STREAM &Dump(
+ STREAM &o, std::string_view EnumToString(enumerationType)) const {
+ char sep{'{'};
+ IterateOverMembers([&](auto e) {
+ o << sep << EnumToString(e);
+ sep = ',';
+ });
+ return o << (sep == '{' ? "{}" : "}");
+ }
+
+private:
+ bitsetType bitset_{};
+};
+} // namespace Fortran::common
+
+template <typename ENUM, std::size_t values>
+struct std::hash<Fortran::common::EnumSet<ENUM, values>> {
+ std::size_t operator()(
+ const Fortran::common::EnumSet<ENUM, values> &x) const {
+ return std::hash(x.bitset());
+ }
+};
+#endif // FORTRAN_COMMON_ENUM_SET_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/erfc-scaled.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/erfc-scaled.h
new file mode 100644
index 00000000000..001af66baf3
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/erfc-scaled.h
@@ -0,0 +1,120 @@
+//===-- include/flang/Common/erfc-scaled.h-----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_COMMON_ERFC_SCALED_H_
+#define FORTRAN_COMMON_ERFC_SCALED_H_
+
+#include "flang/Common/api-attrs.h"
+#include <cmath>
+#include <limits>
+
+namespace Fortran::common {
+template <typename T> inline RT_API_ATTRS T ErfcScaled(T arg) {
+ // Coefficients for approximation to erfc in the first interval.
+ static const T a[5] = {3.16112374387056560e00, 1.13864154151050156e02,
+ 3.77485237685302021e02, 3.20937758913846947e03, 1.85777706184603153e-1};
+ static const T b[4] = {2.36012909523441209e01, 2.44024637934444173e02,
+ 1.28261652607737228e03, 2.84423683343917062e03};
+
+ // Coefficients for approximation to erfc in the second interval.
+ static const T c[9] = {5.64188496988670089e-1, 8.88314979438837594e00,
+ 6.61191906371416295e01, 2.98635138197400131e02, 8.81952221241769090e02,
+ 1.71204761263407058e03, 2.05107837782607147e03, 1.23033935479799725e03,
+ 2.15311535474403846e-8};
+ static const T d[8] = {1.57449261107098347e01, 1.17693950891312499e02,
+ 5.37181101862009858e02, 1.62138957456669019e03, 3.29079923573345963e03,
+ 4.36261909014324716e03, 3.43936767414372164e03, 1.23033935480374942e03};
+
+ // Coefficients for approximation to erfc in the third interval.
+ static const T p[6] = {3.05326634961232344e-1, 3.60344899949804439e-1,
+ 1.25781726111229246e-1, 1.60837851487422766e-2, 6.58749161529837803e-4,
+ 1.63153871373020978e-2};
+ static const T q[5] = {2.56852019228982242e00, 1.87295284992346047e00,
+ 5.27905102951428412e-1, 6.05183413124413191e-2, 2.33520497626869185e-3};
+
+ constexpr T sqrtpi{1.7724538509078120380404576221783883301349L};
+ constexpr T rsqrtpi{0.5641895835477562869480794515607725858440L};
+ constexpr T epsilonby2{std::numeric_limits<T>::epsilon() * 0.5};
+ constexpr T xneg{-26.628e0};
+ constexpr T xhuge{6.71e7};
+ constexpr T thresh{0.46875e0};
+ constexpr T zero{0.0};
+ constexpr T one{1.0};
+ constexpr T four{4.0};
+ constexpr T sixteen{16.0};
+ constexpr T xmax{1.0 / (sqrtpi * std::numeric_limits<T>::min())};
+ static_assert(xmax > xhuge, "xmax must be greater than xhuge");
+
+ T ysq;
+ T xnum;
+ T xden;
+ T del;
+ T result;
+
+ auto x{arg};
+ auto y{std::fabs(x)};
+
+ if (y <= thresh) {
+ // evaluate erf for |x| <= 0.46875
+ ysq = zero;
+ if (y > epsilonby2) {
+ ysq = y * y;
+ }
+ xnum = a[4] * ysq;
+ xden = ysq;
+ for (int i{0}; i < 3; i++) {
+ xnum = (xnum + a[i]) * ysq;
+ xden = (xden + b[i]) * ysq;
+ }
+ result = x * (xnum + a[3]) / (xden + b[3]);
+ result = one - result;
+ result = std::exp(ysq) * result;
+ return result;
+ } else if (y <= four) {
+ // evaluate erfc for 0.46875 < |x| <= 4.0
+ xnum = c[8] * y;
+ xden = y;
+ for (int i{0}; i < 7; ++i) {
+ xnum = (xnum + c[i]) * y;
+ xden = (xden + d[i]) * y;
+ }
+ result = (xnum + c[7]) / (xden + d[7]);
+ } else {
+ // evaluate erfc for |x| > 4.0
+ result = zero;
+ if (y >= xhuge) {
+ if (y < xmax) {
+ result = rsqrtpi / y;
+ }
+ } else {
+ ysq = one / (y * y);
+ xnum = p[5] * ysq;
+ xden = ysq;
+ for (int i{0}; i < 4; ++i) {
+ xnum = (xnum + p[i]) * ysq;
+ xden = (xden + q[i]) * ysq;
+ }
+ result = ysq * (xnum + p[4]) / (xden + q[4]);
+ result = (rsqrtpi - result) / y;
+ }
+ }
+ // fix up for negative argument, erf, etc.
+ if (x < zero) {
+ if (x < xneg) {
+ result = std::numeric_limits<T>::max();
+ } else {
+ ysq = trunc(x * sixteen) / sixteen;
+ del = (x - ysq) * (x + ysq);
+ y = std::exp((ysq * ysq)) * std::exp((del));
+ result = (y + y) - result;
+ }
+ }
+ return result;
+}
+} // namespace Fortran::common
+#endif // FORTRAN_COMMON_ERFC_SCALED_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/fast-int-set.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/fast-int-set.h
new file mode 100644
index 00000000000..1214bac75a4
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/fast-int-set.h
@@ -0,0 +1,106 @@
+//===-- include/flang/Common/fast-int-set.h --------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Implements a Briggs-Torczon fast set of integers in a fixed small range
+// [0..(n-1)] This is a data structure with no dynamic memory allocation and all
+// O(1) elemental operations. It does not need to initialize its internal state
+// arrays, but you can call its InitializeState() member function to avoid
+// complaints from valgrind.
+
+// The set is implemented with two arrays and an element count.
+// 1) The distinct values in the set occupy the leading elements of
+// value_[0 .. size_-1] in arbitrary order. Their positions may change
+// when other values are removed from the set with Remove().
+// 2) For 0 <= j < size_, index_[value_[j]] == j.
+// 3) If only Add() and PopValue() are used, the popped values will be the
+// most recently Add()ed distinct unpopped values; i.e., the value_ array
+// will function as a stack whose top is at (size_-1).
+
+#ifndef FORTRAN_COMMON_FAST_INT_SET_H_
+#define FORTRAN_COMMON_FAST_INT_SET_H_
+
+#include "optional.h"
+
+namespace Fortran::common {
+
+template <int N> class FastIntSet {
+public:
+ static_assert(N > 0);
+ static constexpr int maxValue{N - 1};
+
+ int size() const { return size_; }
+ const int *value() const { return &value_[0]; }
+
+ bool IsValidValue(int n) const { return n >= 0 && n <= maxValue; }
+
+ void Clear() { size_ = 0; }
+
+ bool IsEmpty() const { return size_ == 0; }
+
+ void InitializeState() {
+ if (!isFullyInitialized_) {
+ for (int j{size_}; j < N; ++j) {
+ value_[j] = index_[j] = 0;
+ }
+ isFullyInitialized_ = true;
+ }
+ }
+
+ bool Contains(int n) const {
+ if (IsValidValue(n)) {
+ int j{index_[n]};
+ return j >= 0 && j < size_ && value_[j] == n;
+ } else {
+ return false;
+ }
+ }
+
+ bool Add(int n) {
+ if (IsValidValue(n)) {
+ if (!UncheckedContains(n)) {
+ value_[index_[n] = size_++] = n;
+ }
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ bool Remove(int n) {
+ if (IsValidValue(n)) {
+ if (UncheckedContains(n)) {
+ int last{value_[--size_]};
+ value_[index_[last] = index_[n]] = last;
+ }
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ optional<int> PopValue() {
+ if (IsEmpty()) {
+ return nullopt;
+ } else {
+ return value_[--size_];
+ }
+ }
+
+private:
+ bool UncheckedContains(int n) const {
+ int j{index_[n]};
+ return j >= 0 && j < size_ && value_[j] == n;
+ }
+
+ int value_[N];
+ int index_[N];
+ int size_{0};
+ bool isFullyInitialized_{false}; // memory was cleared
+};
+} // namespace Fortran::common
+#endif // FORTRAN_COMMON_FAST_INT_SET_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/float128.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/float128.h
new file mode 100644
index 00000000000..eddd3cf2538
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/float128.h
@@ -0,0 +1,88 @@
+/*===-- flang/Common/float128.h ----------------------------------*- C -*-===
+ *
+ * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+ * See https://llvm.org/LICENSE.txt for license information.
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ *
+ *===----------------------------------------------------------------------===*/
+
+/* This header is usable in both C and C++ code.
+ * Isolates build compiler checks to determine the presence of an IEEE-754
+ * quad-precision type named __float128 type that isn't __ibm128
+ * (double/double). We don't care whether the type has underlying hardware
+ * support or is emulated.
+ *
+ * 128-bit arithmetic may be available via "long double"; this can
+ * be determined by LDBL_MANT_DIG == 113. A machine may have both 128-bit
+ * long double and __float128; prefer long double by testing for it first.
+ */
+
+#ifndef FORTRAN_COMMON_FLOAT128_H_
+#define FORTRAN_COMMON_FLOAT128_H_
+
+#include "api-attrs.h"
+#include <float.h>
+
+#ifdef __cplusplus
+/*
+ * libc++ does not fully support __float128 right now, e.g.
+ * std::complex<__float128> multiplication ends up calling
+ * copysign() that is not defined for __float128.
+ * In order to check for libc++'s _LIBCPP_VERSION macro
+ * we need to include at least one libc++ header file.
+ */
+#include <cstddef>
+#endif
+
+#undef HAS_FLOAT128
+#if (defined(__FLOAT128__) || defined(__SIZEOF_FLOAT128__)) && \
+ !defined(_LIBCPP_VERSION) && !defined(__CUDA_ARCH__)
+/*
+ * It may still be worth checking for compiler versions,
+ * since earlier versions may define the macros above, but
+ * still do not support __float128 fully.
+ */
+#if __x86_64__
+#if __GNUC__ >= 7 || __clang_major__ >= 7
+#define HAS_FLOAT128 1
+#endif
+#elif defined __PPC__ && __GNUC__ >= 8
+#define HAS_FLOAT128 1
+#endif
+#endif /* (defined(__FLOAT128__) || defined(__SIZEOF_FLOAT128__)) && \
+ !defined(_LIBCPP_VERSION) && !defined(__CUDA_ARCH__) */
+
+#if LDBL_MANT_DIG == 113
+#define HAS_LDBL128 1
+#endif
+
+#if defined(RT_DEVICE_COMPILATION) && defined(__CUDACC__)
+/*
+ * Most offload targets do not support 128-bit 'long double'.
+ * Disable HAS_LDBL128 for __CUDACC__ for the time being.
+ */
+#undef HAS_LDBL128
+#endif
+
+/* Define pure C CFloat128Type and CFloat128ComplexType. */
+#if HAS_LDBL128
+typedef long double CFloat128Type;
+#ifndef __cplusplus
+typedef long double _Complex CFloat128ComplexType;
+#endif
+#elif HAS_FLOAT128
+typedef __float128 CFloat128Type;
+
+#ifndef __cplusplus
+/*
+ * Use mode() attribute supported by GCC and Clang.
+ * Adjust it for other compilers as needed.
+ */
+#if !defined(_ARCH_PPC) || defined(__LONG_DOUBLE_IEEE128__)
+typedef _Complex float __attribute__((mode(TC))) CFloat128ComplexType;
+#else
+typedef _Complex float __attribute__((mode(KC))) CFloat128ComplexType;
+#endif
+#endif // __cplusplus
+#endif
+#endif /* FORTRAN_COMMON_FLOAT128_H_ */
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/float80.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/float80.h
new file mode 100644
index 00000000000..1838f7b13c8
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/float80.h
@@ -0,0 +1,43 @@
+/*===-- flang/Common/float80.h --------------------------------------*- C -*-===
+ *
+ * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+ * See https://llvm.org/LICENSE.txt for license information.
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ *
+ *===----------------------------------------------------------------------===*/
+
+/* This header is usable in both C and C++ code.
+ * Isolates build compiler checks to determine if the 80-bit
+ * floating point format is supported via a particular C type.
+ * It defines CFloat80Type and CppFloat80Type aliases for this
+ * C type.
+ */
+
+#ifndef FORTRAN_COMMON_FLOAT80_H_
+#define FORTRAN_COMMON_FLOAT80_H_
+
+#include "api-attrs.h"
+#include <float.h>
+
+#if LDBL_MANT_DIG == 64
+#undef HAS_FLOAT80
+#define HAS_FLOAT80 1
+#endif
+
+#if defined(RT_DEVICE_COMPILATION) && defined(__CUDACC__)
+/*
+ * 'long double' is treated as 'double' in the CUDA device code,
+ * and there is no support for 80-bit floating point format.
+ * This is probably true for most offload devices, so RT_DEVICE_COMPILATION
+ * check should be enough. For the time being, guard it with __CUDACC__
+ * as well.
+ */
+#undef HAS_FLOAT80
+#endif
+
+#if HAS_FLOAT80
+typedef long double CFloat80Type;
+typedef long double CppFloat80Type;
+#endif
+
+#endif /* FORTRAN_COMMON_FLOAT80_H_ */
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/format.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/format.h
new file mode 100644
index 00000000000..1e64acb8236
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/format.h
@@ -0,0 +1,986 @@
+//===-- include/flang/Common/format.h ---------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_COMMON_FORMAT_H_
+#define FORTRAN_COMMON_FORMAT_H_
+
+#include "Fortran-consts.h"
+#include "enum-set.h"
+#include <cstring>
+#include <limits>
+
+// Define a FormatValidator class template to validate a format expression
+// of a given CHAR type. To enable use in runtime library code as well as
+// compiler code, the implementation does its own parsing without recourse
+// to compiler parser machinery, and avoids features that require C++ runtime
+// library support. A format expression is a pointer to a fixed size
+// character string, with an explicit length. Class function Check analyzes
+// the expression for syntax and semantic errors and warnings. When an error
+// or warning is found, a caller-supplied reporter function is called, which
+// may request early termination of validation analysis when some threshold
+// number of errors have been reported. If the context is a READ, WRITE,
+// or PRINT statement, rather than a FORMAT statement, statement-specific
+// checks are also done.
+
+namespace Fortran::common {
+
+// AddOverflow and MulOverflow are copied from
+// llvm/include/llvm/Support/MathExtras.h and specialised to int64_t.
+
+// __has_builtin is not defined in some compilers. Make sure it is defined.
+#ifndef __has_builtin
+#define __has_builtin(x) 0
+#endif
+
+/// Add two signed integers, computing the two's complement truncated result,
+/// returning true if overflow occurred.
+static inline bool AddOverflow(
+ std::int64_t x, std::int64_t y, std::int64_t &result) {
+#if __has_builtin(__builtin_add_overflow)
+ return __builtin_add_overflow(x, y, &result);
+#else
+ // Perform the unsigned addition.
+ const std::uint64_t ux{static_cast<std::uint64_t>(x)};
+ const std::uint64_t uy{static_cast<std::uint64_t>(y)};
+ const std::uint64_t uresult{ux + uy};
+
+ // Convert to signed.
+ result = static_cast<std::int64_t>(uresult);
+
+ // Adding two positive numbers should result in a positive number.
+ if (x > 0 && y > 0) {
+ return result <= 0;
+ }
+ // Adding two negatives should result in a negative number.
+ if (x < 0 && y < 0) {
+ return result >= 0;
+ }
+ return false;
+#endif
+}
+
+/// Multiply two signed integers, computing the two's complement truncated
+/// result, returning true if an overflow occurred.
+static inline bool MulOverflow(
+ std::int64_t x, std::int64_t y, std::int64_t &result) {
+#if __has_builtin(__builtin_mul_overflow)
+ return __builtin_mul_overflow(x, y, &result);
+#else
+ // Perform the unsigned multiplication on absolute values.
+ const std::uint64_t ux{x < 0 ? (0 - static_cast<std::uint64_t>(x))
+ : static_cast<std::uint64_t>(x)};
+ const std::uint64_t uy{y < 0 ? (0 - static_cast<std::uint64_t>(y))
+ : static_cast<std::uint64_t>(y)};
+ const std::uint64_t uresult{ux * uy};
+
+ // Convert to signed.
+ const bool isNegative = (x < 0) ^ (y < 0);
+ result = isNegative ? (0 - uresult) : uresult;
+
+ // If any of the args was 0, result is 0 and no overflow occurs.
+ if (ux == 0 || uy == 0) {
+ return false;
+ }
+
+ // ux and uy are in [1, 2^n], where n is the number of digits.
+ // Check how the max allowed absolute value (2^n for negative, 2^(n-1) for
+ // positive) divided by an argument compares to the other.
+ if (isNegative) {
+ return ux >
+ (static_cast<std::uint64_t>(std::numeric_limits<std::int64_t>::max()) +
+ std::uint64_t{1}) /
+ uy;
+ } else {
+ return ux >
+ (static_cast<std::uint64_t>(std::numeric_limits<std::int64_t>::max())) /
+ uy;
+ }
+#endif
+}
+
+struct FormatMessage {
+ const char *text; // message text; may have one %s argument
+ const char *arg; // optional %s argument value
+ int offset; // offset to message marker
+ int length; // length of message marker
+ bool isError; // vs. warning
+};
+
+// This declaration is logically private to class FormatValidator.
+// It is placed here to work around a clang compilation problem.
+ENUM_CLASS(TokenKind, None, A, B, BN, BZ, D, DC, DP, DT, E, EN, ES, EX, F, G, I,
+ L, O, P, RC, RD, RN, RP, RU, RZ, S, SP, SS, T, TL, TR, X, Z, Colon, Slash,
+ Backslash, // nonstandard: inhibit newline on output
+ Dollar, // nonstandard: inhibit newline on output on terminals
+ Star, LParen, RParen, Comma, Point, Sign,
+ UnsignedInteger, // value in integerValue_
+ String) // char-literal-constant or Hollerith constant
+
+template <typename CHAR = char> class FormatValidator {
+public:
+ using Reporter = std::function<bool(const FormatMessage &)>;
+ FormatValidator(const CHAR *format, size_t length, Reporter reporter,
+ IoStmtKind stmt = IoStmtKind::None)
+ : format_{format}, end_{format + length}, reporter_{reporter},
+ stmt_{stmt}, cursor_{format - 1} {
+ CHECK(format);
+ }
+
+ bool Check();
+ int maxNesting() const { return maxNesting_; }
+
+private:
+ common::EnumSet<TokenKind, TokenKind_enumSize> itemsWithLeadingInts_{
+ TokenKind::A, TokenKind::B, TokenKind::D, TokenKind::DT, TokenKind::E,
+ TokenKind::EN, TokenKind::ES, TokenKind::EX, TokenKind::F, TokenKind::G,
+ TokenKind::I, TokenKind::L, TokenKind::O, TokenKind::P, TokenKind::X,
+ TokenKind::Z, TokenKind::Slash, TokenKind::LParen};
+
+ struct Token {
+ Token &set_kind(TokenKind kind) {
+ kind_ = kind;
+ return *this;
+ }
+ Token &set_offset(int offset) {
+ offset_ = offset;
+ return *this;
+ }
+ Token &set_length(int length) {
+ length_ = length;
+ return *this;
+ }
+
+ TokenKind kind() const { return kind_; }
+ int offset() const { return offset_; }
+ int length() const { return length_; }
+
+ bool IsSet() { return kind_ != TokenKind::None; }
+
+ private:
+ TokenKind kind_{TokenKind::None};
+ int offset_{0};
+ int length_{1};
+ };
+
+ void ReportWarning(const char *text) { ReportWarning(text, token_); }
+ void ReportWarning(
+ const char *text, Token &token, const char *arg = nullptr) {
+ FormatMessage msg{
+ text, arg ? arg : argString_, token.offset(), token.length(), false};
+ reporterExit_ |= reporter_(msg);
+ }
+
+ void ReportError(const char *text) { ReportError(text, token_); }
+ void ReportError(const char *text, Token &token, const char *arg = nullptr) {
+ if (suppressMessageCascade_) {
+ return;
+ }
+ formatHasErrors_ = true;
+ suppressMessageCascade_ = true;
+ FormatMessage msg{
+ text, arg ? arg : argString_, token.offset(), token.length(), true};
+ reporterExit_ |= reporter_(msg);
+ }
+
+ void SetLength() { SetLength(token_); }
+ void SetLength(Token &token) {
+ token.set_length(cursor_ - format_ - token.offset() + (cursor_ < end_));
+ }
+
+ CHAR NextChar();
+ CHAR LookAheadChar();
+ void Advance(TokenKind);
+ void NextToken();
+
+ void check_r(bool allowed = true);
+ bool check_w();
+ void check_m();
+ bool check_d(bool checkScaleFactor = false);
+ void check_k();
+ void check_e();
+
+ const CHAR *const format_; // format text
+ const CHAR *const end_; // one-past-last of format_ text
+ Reporter reporter_;
+ IoStmtKind stmt_;
+
+ const CHAR *cursor_{}; // current location in format_
+ const CHAR *laCursor_{}; // lookahead cursor
+ Token previousToken_{};
+ Token token_{}; // current token
+ Token knrToken_{}; // k, n, or r UnsignedInteger token
+ Token scaleFactorToken_{}; // most recent scale factor token P
+ std::int64_t integerValue_{-1}; // value of UnsignedInteger token
+ std::int64_t knrValue_{-1}; // -1 ==> not present
+ std::int64_t scaleFactorValue_{}; // signed k in kP
+ std::int64_t wValue_{-1};
+ char argString_[3]{}; // 1-2 character msg arg; usually edit descriptor name
+ bool formatHasErrors_{false};
+ bool unterminatedFormatError_{false};
+ bool suppressMessageCascade_{false};
+ bool reporterExit_{false};
+ int maxNesting_{0}; // max level of nested parentheses
+};
+
+template <typename CHAR> static inline bool IsWhite(CHAR c) {
+ // White space. ' ' is standard. Other characters are extensions.
+ // Extension candidates:
+ // '\t' (horizontal tab)
+ // '\n' (new line)
+ // '\v' (vertical tab)
+ // '\f' (form feed)
+ // '\r' (carriage ret)
+ return c == ' ' || c == '\t' || c == '\v';
+}
+
+template <typename CHAR> CHAR FormatValidator<CHAR>::NextChar() {
+ for (++cursor_; cursor_ < end_; ++cursor_) {
+ if (!IsWhite(*cursor_)) {
+ return toupper(*cursor_);
+ }
+ }
+ cursor_ = end_; // don't allow cursor_ > end_
+ return ' ';
+}
+
+template <typename CHAR> CHAR FormatValidator<CHAR>::LookAheadChar() {
+ for (laCursor_ = cursor_ + 1; laCursor_ < end_; ++laCursor_) {
+ if (!IsWhite(*laCursor_)) {
+ return toupper(*laCursor_);
+ }
+ }
+ laCursor_ = end_; // don't allow laCursor_ > end_
+ return ' ';
+}
+
+// After a call to LookAheadChar, set token kind and advance cursor to laCursor.
+template <typename CHAR> void FormatValidator<CHAR>::Advance(TokenKind tk) {
+ cursor_ = laCursor_;
+ token_.set_kind(tk);
+}
+
+template <typename CHAR> void FormatValidator<CHAR>::NextToken() {
+ // At entry, cursor_ points before the start of the next token.
+ // At exit, cursor_ points to last CHAR of token_.
+
+ previousToken_ = token_;
+ CHAR c{NextChar()};
+ token_.set_kind(TokenKind::None);
+ token_.set_offset(cursor_ - format_);
+ token_.set_length(1);
+ if (c == '_' && integerValue_ >= 0) { // C1305, C1309, C1310, C1312, C1313
+ ReportError("Kind parameter '_' character in format expression");
+ }
+ integerValue_ = -1;
+
+ switch (c) {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': {
+ const CHAR *lastCursor{};
+ integerValue_ = 0;
+ bool overflow{false};
+ do {
+ lastCursor = cursor_;
+ if (!overflow) {
+ overflow = MulOverflow(
+ static_cast<std::int64_t>(10), integerValue_, integerValue_);
+ }
+ if (!overflow) {
+ overflow = AddOverflow(
+ integerValue_, static_cast<std::int64_t>(c - '0'), integerValue_);
+ }
+ c = NextChar();
+ } while (c >= '0' && c <= '9');
+ cursor_ = lastCursor;
+ token_.set_kind(TokenKind::UnsignedInteger);
+ if (overflow) {
+ SetLength();
+ ReportError("Integer overflow in format expression");
+ break;
+ }
+ if (LookAheadChar() != 'H') {
+ break;
+ }
+ // Hollerith constant
+ if (laCursor_ + integerValue_ < end_) {
+ token_.set_kind(TokenKind::String);
+ cursor_ = laCursor_ + integerValue_;
+ } else {
+ token_.set_kind(TokenKind::None);
+ cursor_ = end_;
+ }
+ SetLength();
+ if (stmt_ == IoStmtKind::Read) { // 13.3.2p6
+ ReportError("'H' edit descriptor in READ format expression");
+ } else if (token_.kind() == TokenKind::None) {
+ ReportError("Unterminated 'H' edit descriptor");
+ } else {
+ ReportWarning("Legacy 'H' edit descriptor");
+ }
+ break;
+ }
+ case 'A':
+ token_.set_kind(TokenKind::A);
+ break;
+ case 'B':
+ switch (LookAheadChar()) {
+ case 'N':
+ Advance(TokenKind::BN);
+ break;
+ case 'Z':
+ Advance(TokenKind::BZ);
+ break;
+ default:
+ token_.set_kind(TokenKind::B);
+ break;
+ }
+ break;
+ case 'D':
+ switch (LookAheadChar()) {
+ case 'C':
+ Advance(TokenKind::DC);
+ break;
+ case 'P':
+ Advance(TokenKind::DP);
+ break;
+ case 'T':
+ Advance(TokenKind::DT);
+ break;
+ default:
+ token_.set_kind(TokenKind::D);
+ break;
+ }
+ break;
+ case 'E':
+ switch (LookAheadChar()) {
+ case 'N':
+ Advance(TokenKind::EN);
+ break;
+ case 'S':
+ Advance(TokenKind::ES);
+ break;
+ case 'X':
+ Advance(TokenKind::EX);
+ break;
+ default:
+ token_.set_kind(TokenKind::E);
+ break;
+ }
+ break;
+ case 'F':
+ token_.set_kind(TokenKind::F);
+ break;
+ case 'G':
+ token_.set_kind(TokenKind::G);
+ break;
+ case 'I':
+ token_.set_kind(TokenKind::I);
+ break;
+ case 'L':
+ token_.set_kind(TokenKind::L);
+ break;
+ case 'O':
+ token_.set_kind(TokenKind::O);
+ break;
+ case 'P':
+ token_.set_kind(TokenKind::P);
+ break;
+ case 'R':
+ switch (LookAheadChar()) {
+ case 'C':
+ Advance(TokenKind::RC);
+ break;
+ case 'D':
+ Advance(TokenKind::RD);
+ break;
+ case 'N':
+ Advance(TokenKind::RN);
+ break;
+ case 'P':
+ Advance(TokenKind::RP);
+ break;
+ case 'U':
+ Advance(TokenKind::RU);
+ break;
+ case 'Z':
+ Advance(TokenKind::RZ);
+ break;
+ default:
+ token_.set_kind(TokenKind::None);
+ break;
+ }
+ break;
+ case 'S':
+ switch (LookAheadChar()) {
+ case 'P':
+ Advance(TokenKind::SP);
+ break;
+ case 'S':
+ Advance(TokenKind::SS);
+ break;
+ default:
+ token_.set_kind(TokenKind::S);
+ break;
+ }
+ break;
+ case 'T':
+ switch (LookAheadChar()) {
+ case 'L':
+ Advance(TokenKind::TL);
+ break;
+ case 'R':
+ Advance(TokenKind::TR);
+ break;
+ default:
+ token_.set_kind(TokenKind::T);
+ break;
+ }
+ break;
+ case 'X':
+ token_.set_kind(TokenKind::X);
+ break;
+ case 'Z':
+ token_.set_kind(TokenKind::Z);
+ break;
+ case '-':
+ case '+':
+ token_.set_kind(TokenKind::Sign);
+ break;
+ case '/':
+ token_.set_kind(TokenKind::Slash);
+ break;
+ case '(':
+ token_.set_kind(TokenKind::LParen);
+ break;
+ case ')':
+ token_.set_kind(TokenKind::RParen);
+ break;
+ case '.':
+ token_.set_kind(TokenKind::Point);
+ break;
+ case ':':
+ token_.set_kind(TokenKind::Colon);
+ break;
+ case '\\':
+ token_.set_kind(TokenKind::Backslash);
+ break;
+ case '$':
+ token_.set_kind(TokenKind::Dollar);
+ break;
+ case '*':
+ token_.set_kind(LookAheadChar() == '(' ? TokenKind::Star : TokenKind::None);
+ break;
+ case ',': {
+ token_.set_kind(TokenKind::Comma);
+ CHAR laChar = LookAheadChar();
+ if (laChar == ',') {
+ Advance(TokenKind::Comma);
+ token_.set_offset(cursor_ - format_);
+ ReportError("Unexpected ',' in format expression");
+ } else if (laChar == ')') {
+ ReportError("Unexpected ',' before ')' in format expression");
+ }
+ break;
+ }
+ case '\'':
+ case '"':
+ for (++cursor_; cursor_ < end_; ++cursor_) {
+ if (*cursor_ == c) {
+ if (auto nc{cursor_ + 1}; nc < end_ && *nc != c) {
+ token_.set_kind(TokenKind::String);
+ break;
+ }
+ ++cursor_;
+ }
+ }
+ SetLength();
+ if (token_.kind() != TokenKind::String) {
+ ReportError("Unterminated string");
+ } else if (stmt_ == IoStmtKind::Read &&
+ previousToken_.kind() != TokenKind::DT) { // 13.3.2p6
+ ReportWarning("String edit descriptor in READ format expression");
+ }
+ break;
+ default:
+ if (cursor_ >= end_ && !unterminatedFormatError_) {
+ suppressMessageCascade_ = false;
+ ReportError("Unterminated format expression");
+ unterminatedFormatError_ = true;
+ }
+ token_.set_kind(TokenKind::None);
+ break;
+ }
+
+ SetLength();
+}
+
+template <typename CHAR> void FormatValidator<CHAR>::check_r(bool allowed) {
+ if (!allowed && knrValue_ >= 0) {
+ ReportError("Repeat specifier before '%s' edit descriptor", knrToken_);
+ } else if (knrValue_ == 0) {
+ ReportError("'%s' edit descriptor repeat specifier must be positive",
+ knrToken_); // C1304
+ }
+}
+
+// Return the predicate "w value is present" to control further processing.
+template <typename CHAR> bool FormatValidator<CHAR>::check_w() {
+ if (token_.kind() == TokenKind::UnsignedInteger) {
+ wValue_ = integerValue_;
+ if (wValue_ == 0) {
+ if (*argString_ == 'A' || stmt_ == IoStmtKind::Read) {
+ // C1306, 13.7.2.1p6
+ ReportError("'%s' edit descriptor 'w' value must be positive");
+ } else if (*argString_ == 'L') {
+ ReportWarning("'%s' edit descriptor 'w' value should be positive");
+ }
+ }
+ NextToken();
+ return true;
+ }
+ if (*argString_ != 'A' && *argString_ != 'L') {
+ ReportWarning("Expected '%s' edit descriptor 'w' value"); // C1306
+ }
+ return false;
+}
+
+template <typename CHAR> void FormatValidator<CHAR>::check_m() {
+ if (token_.kind() != TokenKind::Point) {
+ return;
+ }
+ NextToken();
+ if (token_.kind() != TokenKind::UnsignedInteger) {
+ ReportError("Expected '%s' edit descriptor 'm' value after '.'");
+ return;
+ }
+ if ((stmt_ == IoStmtKind::Print || stmt_ == IoStmtKind::Write) &&
+ wValue_ > 0 && integerValue_ > wValue_) { // 13.7.2.2p5, 13.7.2.4p6
+ ReportError("'%s' edit descriptor 'm' value is greater than 'w' value");
+ }
+ NextToken();
+}
+
+// Return the predicate "d value is present" to control further processing.
+template <typename CHAR>
+bool FormatValidator<CHAR>::check_d(bool checkScaleFactor) {
+ if (token_.kind() != TokenKind::Point) {
+ ReportError("Expected '%s' edit descriptor '.d' value");
+ return false;
+ }
+ NextToken();
+ if (token_.kind() != TokenKind::UnsignedInteger) {
+ ReportError("Expected '%s' edit descriptor 'd' value after '.'");
+ return false;
+ }
+ if (checkScaleFactor) {
+ check_k();
+ }
+ NextToken();
+ return true;
+}
+
+// Check the value of scale factor k against a field width d.
+template <typename CHAR> void FormatValidator<CHAR>::check_k() {
+ // Limit the check to D and E edit descriptors in output statements that
+ // explicitly set the scale factor.
+ if (stmt_ != IoStmtKind::Print && stmt_ != IoStmtKind::Write) {
+ return;
+ }
+ if (!scaleFactorToken_.IsSet()) {
+ return;
+ }
+ // 13.7.2.3.3p5 - The values of d and k must satisfy:
+ // −d < k <= 0; or
+ // 0 < k < d+2
+ const int64_t d{integerValue_};
+ const int64_t k{scaleFactorValue_};
+ // Exception: d = k = 0 is nonstandard, but has a reasonable interpretation.
+ if (d == 0 && k == 0) {
+ return;
+ }
+ if (k <= 0 && !(-d < k)) {
+ ReportError("Negative scale factor k (from kP) and width d in a '%s' "
+ "edit descriptor must satisfy '-d < k'");
+ } else if (k > 0 && !(k < d + 2)) {
+ ReportError("Positive scale factor k (from kP) and width d in a '%s' "
+ "edit descriptor must satisfy 'k < d+2'");
+ }
+}
+
+template <typename CHAR> void FormatValidator<CHAR>::check_e() {
+ if (token_.kind() != TokenKind::E) {
+ return;
+ }
+ NextToken();
+ if (token_.kind() != TokenKind::UnsignedInteger) {
+ ReportError("Expected '%s' edit descriptor 'e' value after 'E'");
+ return;
+ }
+ NextToken();
+}
+
+template <typename CHAR> bool FormatValidator<CHAR>::Check() {
+ if (!*format_) {
+ ReportError("Empty format expression");
+ return formatHasErrors_;
+ }
+ NextToken();
+ if (token_.kind() != TokenKind::LParen) {
+ ReportError("Format expression must have an initial '('");
+ return formatHasErrors_;
+ }
+ NextToken();
+
+ int nestLevel{0}; // Outer level ()s are at level 0.
+ Token starToken{}; // unlimited format token
+ bool hasDataEditDesc{false};
+
+ // Subject to error recovery exceptions, a loop iteration processes one
+ // edit descriptor or does list management. The loop terminates when
+ // - a level-0 right paren is processed (format may be valid)
+ // - the end of an incomplete format is reached
+ // - the error reporter requests termination (error threshold reached)
+ while (!reporterExit_) {
+ Token signToken{};
+ knrValue_ = -1; // -1 ==> not present
+ wValue_ = -1;
+ bool commaRequired{true};
+
+ if (token_.kind() == TokenKind::Sign) {
+ signToken = token_;
+ NextToken();
+ }
+ if (token_.kind() == TokenKind::UnsignedInteger) {
+ knrToken_ = token_;
+ knrValue_ = integerValue_;
+ NextToken();
+ }
+ if (signToken.IsSet() && (knrValue_ < 0 || token_.kind() != TokenKind::P)) {
+ argString_[0] = format_[signToken.offset()];
+ argString_[1] = 0;
+ ReportError("Unexpected '%s' in format expression", signToken);
+ }
+ // Default message argument.
+ // Alphabetic edit descriptor names are one or two characters in length.
+ argString_[0] = toupper(format_[token_.offset()]);
+ argString_[1] = token_.length() > 1 ? toupper(*cursor_) : 0;
+ // Process one format edit descriptor or do format list management.
+ switch (token_.kind()) {
+ case TokenKind::A:
+ // R1307 data-edit-desc -> A [w]
+ hasDataEditDesc = true;
+ check_r();
+ NextToken();
+ check_w();
+ break;
+ case TokenKind::B:
+ case TokenKind::I:
+ case TokenKind::O:
+ case TokenKind::Z:
+ // R1307 data-edit-desc -> B w [. m] | I w [. m] | O w [. m] | Z w [. m]
+ hasDataEditDesc = true;
+ check_r();
+ NextToken();
+ if (check_w()) {
+ check_m();
+ }
+ break;
+ case TokenKind::D:
+ case TokenKind::F: {
+ // R1307 data-edit-desc -> D w . d | F w . d
+ bool isD{token_.kind() == TokenKind::D};
+ hasDataEditDesc = true;
+ check_r();
+ NextToken();
+ if (check_w()) {
+ check_d(/*checkScaleFactor=*/isD);
+ }
+ break;
+ }
+ case TokenKind::E:
+ case TokenKind::EN:
+ case TokenKind::ES:
+ case TokenKind::EX: {
+ // R1307 data-edit-desc ->
+ // E w . d [E e] | EN w . d [E e] | ES w . d [E e] | EX w . d [E e]
+ bool isE{token_.kind() == TokenKind::E};
+ hasDataEditDesc = true;
+ check_r();
+ NextToken();
+ if (check_w() && check_d(/*checkScaleFactor=*/isE)) {
+ check_e();
+ }
+ break;
+ }
+ case TokenKind::G:
+ // R1307 data-edit-desc -> G w [. d [E e]]
+ hasDataEditDesc = true;
+ check_r();
+ NextToken();
+ if (check_w()) {
+ if (wValue_ > 0) {
+ if (check_d()) { // C1307
+ check_e();
+ }
+ } else if (token_.kind() == TokenKind::Point && check_d() &&
+ token_.kind() == TokenKind::E) { // C1308
+ ReportError("A 'G0' edit descriptor must not have an 'e' value");
+ NextToken();
+ if (token_.kind() == TokenKind::UnsignedInteger) {
+ NextToken();
+ }
+ }
+ }
+ break;
+ case TokenKind::L:
+ // R1307 data-edit-desc -> L w
+ hasDataEditDesc = true;
+ check_r();
+ NextToken();
+ check_w();
+ break;
+ case TokenKind::DT:
+ // R1307 data-edit-desc -> DT [char-literal-constant] [( v-list )]
+ hasDataEditDesc = true;
+ check_r();
+ NextToken();
+ if (token_.kind() == TokenKind::String) {
+ NextToken();
+ }
+ if (token_.kind() == TokenKind::LParen) {
+ do {
+ NextToken();
+ if (token_.kind() == TokenKind::Sign) {
+ NextToken();
+ }
+ if (token_.kind() != TokenKind::UnsignedInteger) {
+ ReportError(
+ "Expected integer constant in 'DT' edit descriptor v-list");
+ break;
+ }
+ NextToken();
+ } while (token_.kind() == TokenKind::Comma);
+ if (token_.kind() != TokenKind::RParen) {
+ ReportError("Expected ',' or ')' in 'DT' edit descriptor v-list");
+ while (cursor_ < end_ && token_.kind() != TokenKind::RParen) {
+ NextToken();
+ }
+ }
+ NextToken();
+ }
+ break;
+ case TokenKind::String:
+ // R1304 data-edit-desc -> char-string-edit-desc
+ if (knrValue_ >= 0) {
+ ReportError("Repeat specifier before character string edit descriptor",
+ knrToken_);
+ }
+ NextToken();
+ break;
+ case TokenKind::BN:
+ case TokenKind::BZ:
+ case TokenKind::DC:
+ case TokenKind::DP:
+ case TokenKind::RC:
+ case TokenKind::RD:
+ case TokenKind::RN:
+ case TokenKind::RP:
+ case TokenKind::RU:
+ case TokenKind::RZ:
+ case TokenKind::S:
+ case TokenKind::SP:
+ case TokenKind::SS:
+ // R1317 sign-edit-desc -> SS | SP | S
+ // R1318 blank-interp-edit-desc -> BN | BZ
+ // R1319 round-edit-desc -> RU | RD | RZ | RN | RC | RP
+ // R1320 decimal-edit-desc -> DC | DP
+ check_r(false);
+ NextToken();
+ break;
+ case TokenKind::P: {
+ // R1313 control-edit-desc -> k P
+ if (knrValue_ < 0) {
+ ReportError("'P' edit descriptor must have a scale factor");
+ } else {
+ scaleFactorToken_ = knrToken_;
+ if (signToken.IsSet() && format_[signToken.offset()] == '-') {
+ scaleFactorValue_ = -knrValue_;
+ } else {
+ scaleFactorValue_ = knrValue_;
+ }
+ }
+ // Diagnosing C1302 may require multiple token lookahead.
+ // Save current cursor position to enable backup.
+ const CHAR *saveCursor{cursor_};
+ NextToken();
+ if (token_.kind() == TokenKind::UnsignedInteger) {
+ NextToken();
+ }
+ switch (token_.kind()) {
+ case TokenKind::D:
+ case TokenKind::E:
+ case TokenKind::EN:
+ case TokenKind::ES:
+ case TokenKind::EX:
+ case TokenKind::F:
+ case TokenKind::G:
+ commaRequired = false;
+ break;
+ default:;
+ }
+ cursor_ = saveCursor;
+ NextToken();
+ break;
+ }
+ case TokenKind::T:
+ case TokenKind::TL:
+ case TokenKind::TR:
+ // R1315 position-edit-desc -> T n | TL n | TR n
+ check_r(false);
+ NextToken();
+ if (integerValue_ <= 0) { // C1311
+ ReportError("'%s' edit descriptor must have a positive position value");
+ }
+ NextToken();
+ break;
+ case TokenKind::X:
+ // R1315 position-edit-desc -> n X
+ if (knrValue_ == 0) { // C1311
+ ReportError("'X' edit descriptor must have a positive position value",
+ knrToken_);
+ } else if (knrValue_ < 0) {
+ ReportWarning(
+ "'X' edit descriptor must have a positive position value");
+ }
+ NextToken();
+ break;
+ case TokenKind::Colon:
+ // R1313 control-edit-desc -> :
+ check_r(false);
+ commaRequired = false;
+ NextToken();
+ break;
+ case TokenKind::Slash:
+ // R1313 control-edit-desc -> [r] /
+ commaRequired = false;
+ NextToken();
+ break;
+ case TokenKind::Backslash:
+ check_r(false);
+ ReportWarning("Non-standard '\\' edit descriptor");
+ NextToken();
+ break;
+ case TokenKind::Dollar:
+ check_r(false);
+ ReportWarning("Non-standard '$' edit descriptor");
+ NextToken();
+ break;
+ case TokenKind::Star:
+ // NextToken assigns a token kind of Star only if * is followed by (.
+ // So the next token is guaranteed to be LParen.
+ if (nestLevel > 0) {
+ ReportError("Nested unlimited format item list");
+ }
+ starToken = token_;
+ if (knrValue_ >= 0) {
+ ReportError(
+ "Repeat specifier before unlimited format item list", knrToken_);
+ }
+ hasDataEditDesc = false;
+ NextToken();
+ [[fallthrough]];
+ case TokenKind::LParen:
+ if (knrValue_ == 0) {
+ ReportError("List repeat specifier must be positive", knrToken_);
+ }
+ if (++nestLevel > maxNesting_) {
+ maxNesting_ = nestLevel;
+ }
+ break;
+ case TokenKind::RParen:
+ if (knrValue_ >= 0) {
+ ReportError("Unexpected integer constant", knrToken_);
+ }
+ do {
+ if (nestLevel == 0) {
+ // Any characters after level-0 ) are ignored.
+ return formatHasErrors_; // normal exit (may have messages)
+ }
+ if (nestLevel == 1 && starToken.IsSet() && !hasDataEditDesc) {
+ SetLength(starToken);
+ ReportError( // C1303
+ "Unlimited format item list must contain a data edit descriptor",
+ starToken);
+ }
+ --nestLevel;
+ NextToken();
+ } while (token_.kind() == TokenKind::RParen);
+ if (nestLevel == 0 && starToken.IsSet()) {
+ ReportError("Character in format after unlimited format item list");
+ }
+ break;
+ case TokenKind::Comma:
+ if (knrValue_ >= 0) {
+ ReportError("Unexpected integer constant", knrToken_);
+ }
+ if (suppressMessageCascade_ || reporterExit_) {
+ break;
+ }
+ [[fallthrough]];
+ default:
+ ReportError("Unexpected '%s' in format expression");
+ NextToken();
+ }
+
+ // Process comma separator and exit an incomplete format.
+ switch (token_.kind()) {
+ case TokenKind::Colon: // Comma not required; token not yet processed.
+ case TokenKind::Slash: // Comma not required; token not yet processed.
+ case TokenKind::RParen: // Comma not allowed; token not yet processed.
+ suppressMessageCascade_ = false;
+ break;
+ case TokenKind::LParen: // Comma not allowed; token already processed.
+ case TokenKind::Comma: // Normal comma case; move past token.
+ suppressMessageCascade_ = false;
+ NextToken();
+ break;
+ case TokenKind::Sign: // Error; main switch has a better message.
+ case TokenKind::None: // Error; token not yet processed.
+ if (cursor_ >= end_) {
+ return formatHasErrors_; // incomplete format error exit
+ }
+ break;
+ default:
+ // Possible first token of the next format item; token not yet processed.
+ if (commaRequired) {
+ const char *s{"Expected ',' or ')' in format expression"}; // C1302
+ if (previousToken_.kind() == TokenKind::UnsignedInteger &&
+ previousToken_.length() > 1 &&
+ itemsWithLeadingInts_.test(token_.kind())) {
+ // F10.32F10.3 is ambiguous, F10.3F10.3 is not
+ ReportError(s);
+ } else {
+ ReportWarning(s);
+ }
+ }
+ }
+ }
+
+ return formatHasErrors_; // error reporter (message threshold) exit
+}
+
+} // namespace Fortran::common
+#endif // FORTRAN_COMMON_FORMAT_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/idioms.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/idioms.h
new file mode 100644
index 00000000000..06631bcf2e4
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/idioms.h
@@ -0,0 +1,156 @@
+//===-- include/flang/Common/idioms.h ---------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_COMMON_IDIOMS_H_
+#define FORTRAN_COMMON_IDIOMS_H_
+
+// Defines anything that might ever be useful in more than one source file
+// or that is too weird or too specific to the host C++ compiler to be
+// exposed elsewhere.
+
+#ifndef __cplusplus
+#error this is a C++ program
+#endif
+#if __cplusplus < 201703L
+#error this is a C++17 program
+#endif
+#if !__clang__ && defined __GNUC__ && __GNUC__ < 7
+#error g++ >= 7.2 is required
+#endif
+
+#include "enum-class.h"
+#include "variant.h"
+#include "visit.h"
+#include <array>
+#include <functional>
+#include <list>
+#include <memory>
+#include <optional>
+#include <string>
+#include <tuple>
+#include <type_traits>
+
+#if __GNUC__ == 7
+// Avoid a deduction bug in GNU 7.x headers by forcing the answer.
+namespace std {
+template <typename A>
+struct is_trivially_copy_constructible<list<A>> : false_type {};
+template <typename A>
+struct is_trivially_copy_constructible<optional<list<A>>> : false_type {};
+} // namespace std
+#endif
+
+// enable "this is a std::string"s with the 's' suffix
+using namespace std::literals::string_literals;
+
+namespace Fortran::common {
+
+// Helper templates for combining a list of lambdas into an anonymous
+// struct for use with common::visit() on a std::variant<> sum type.
+// E.g.: common::visit(visitors{
+// [&](const firstType &x) { ... },
+// [&](const secondType &x) { ... },
+// ...
+// [&](const auto &catchAll) { ... }}, variantObject);
+
+template <typename... LAMBDAS> struct visitors : LAMBDAS... {
+ using LAMBDAS::operator()...;
+};
+
+template <typename... LAMBDAS> visitors(LAMBDAS... x) -> visitors<LAMBDAS...>;
+
+// Calls std::fprintf(stderr, ...), then abort().
+[[noreturn]] void die(const char *, ...);
+
+#define DIE(x) Fortran::common::die(x " at " __FILE__ "(%d)", __LINE__)
+
+// For switch statement default: labels.
+#define CRASH_NO_CASE DIE("no case")
+
+// clang-format off
+// For switch statements whose cases have return statements for
+// all possibilities. Clang emits warnings if the default: is
+// present, gcc emits warnings if it is absent.
+#if __clang__
+#define SWITCH_COVERS_ALL_CASES
+#else
+#define SWITCH_COVERS_ALL_CASES default: CRASH_NO_CASE;
+#endif
+// clang-format on
+
+// For cheap assertions that should be applied in production.
+// To disable, compile with '-DCHECK=(void)'
+#ifndef CHECK
+#define CHECK(x) ((x) || (DIE("CHECK(" #x ") failed"), false))
+#endif
+
+// Same as above, but with a custom error message.
+#ifndef CHECK_MSG
+#define CHECK_MSG(x, y) ((x) || (DIE("CHECK(" #x ") failed: " #y), false))
+#endif
+
+// User-defined type traits that default to false:
+// Invoke CLASS_TRAIT(traitName) to define a trait, then put
+// using traitName = std::true_type; (or false_type)
+// into the appropriate class definitions. You can then use
+// typename std::enable_if_t<traitName<...>, ...>
+// in template specialization definitions.
+#define CLASS_TRAIT(T) \
+ namespace class_trait_ns_##T { \
+ template <typename A> std::true_type test(typename A::T *); \
+ template <typename A> std::false_type test(...); \
+ template <typename A> \
+ constexpr bool has_trait{decltype(test<A>(nullptr))::value}; \
+ template <typename A> constexpr bool trait_value() { \
+ if constexpr (has_trait<A>) { \
+ using U = typename A::T; \
+ return U::value; \
+ } else { \
+ return false; \
+ } \
+ } \
+ } \
+ template <typename A> constexpr bool T{class_trait_ns_##T::trait_value<A>()};
+
+// Check that a pointer is non-null and dereference it
+#define DEREF(p) Fortran::common::Deref(p, __FILE__, __LINE__)
+
+template <typename T> constexpr T &Deref(T *p, const char *file, int line) {
+ if (!p) {
+ Fortran::common::die("nullptr dereference at %s(%d)", file, line);
+ }
+ return *p;
+}
+
+template <typename T>
+constexpr T &Deref(const std::unique_ptr<T> &p, const char *file, int line) {
+ if (!p) {
+ Fortran::common::die("nullptr dereference at %s(%d)", file, line);
+ }
+ return *p;
+}
+
+// Given a const reference to a value, return a copy of the value.
+template <typename A> A Clone(const A &x) { return x; }
+
+// C++ does a weird and dangerous thing when deducing template type parameters
+// from function arguments: lvalue references are allowed to match rvalue
+// reference arguments. Template function declarations like
+// template<typename A> int foo(A &&);
+// need to be protected against this C++ language feature when functions
+// may modify such arguments. Use these type functions to invoke SFINAE
+// on a result type via
+// template<typename A> common::IfNoLvalue<int, A> foo(A &&);
+// or, for constructors,
+// template<typename A, typename = common::NoLvalue<A>> int foo(A &&);
+// This works with parameter packs too.
+template <typename A, typename... B>
+using IfNoLvalue = std::enable_if_t<(... && !std::is_lvalue_reference_v<B>), A>;
+template <typename... RVREF> using NoLvalue = IfNoLvalue<void, RVREF...>;
+} // namespace Fortran::common
+#endif // FORTRAN_COMMON_IDIOMS_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/leading-zero-bit-count.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/leading-zero-bit-count.h
new file mode 100644
index 00000000000..a296e0b4469
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/leading-zero-bit-count.h
@@ -0,0 +1,96 @@
+//===-- include/flang/Common/leading-zero-bit-count.h -----------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_COMMON_LEADING_ZERO_BIT_COUNT_H_
+#define FORTRAN_COMMON_LEADING_ZERO_BIT_COUNT_H_
+
+// A fast and portable function that implements Fortran's LEADZ intrinsic
+// function, which counts the number of leading (most significant) zero bit
+// positions in an integer value. (If the most significant bit is set, the
+// leading zero count is zero; if no bit is set, the leading zero count is the
+// word size in bits; otherwise, it's the largest left shift count that
+// doesn't reduce the number of bits in the word that are set.)
+
+#include <cinttypes>
+
+namespace Fortran::common {
+namespace {
+// The following magic constant is a binary deBruijn sequence.
+// It has the remarkable property that if one extends it
+// (virtually) on the right with 5 more zero bits, then all
+// of the 64 contiguous framed blocks of six bits in the
+// extended 69-bit sequence are distinct. Consequently,
+// if one shifts it left by any shift count [0..63] with
+// truncation and extracts the uppermost six bit field
+// of the shifted value, each shift count maps to a distinct
+// field value. That means that we can map those 64 field
+// values back to the shift counts that produce them,
+// and (the point) this means that we can shift this value
+// by an unknown bit count in [0..63] and then figure out
+// what that count must have been.
+// 0 7 e d d 5 e 5 9 a 4 e 2 8 c 2
+// 0000011111101101110101011110010110011010010011100010100011000010
+static constexpr std::uint64_t deBruijn{0x07edd5e59a4e28c2};
+static constexpr std::uint8_t mapping[64]{63, 0, 58, 1, 59, 47, 53, 2, 60, 39,
+ 48, 27, 54, 33, 42, 3, 61, 51, 37, 40, 49, 18, 28, 20, 55, 30, 34, 11, 43,
+ 14, 22, 4, 62, 57, 46, 52, 38, 26, 32, 41, 50, 36, 17, 19, 29, 10, 13, 21,
+ 56, 45, 25, 31, 35, 16, 9, 12, 44, 24, 15, 8, 23, 7, 6, 5};
+} // namespace
+
+inline constexpr int LeadingZeroBitCount(std::uint64_t x) {
+ if (x == 0) {
+ return 64;
+ } else {
+ x |= x >> 1;
+ x |= x >> 2;
+ x |= x >> 4;
+ x |= x >> 8;
+ x |= x >> 16;
+ x |= x >> 32;
+ // All of the bits below the uppermost set bit are now also set.
+ x -= x >> 1; // All of the bits below the uppermost are now clear.
+ // x now has exactly one bit set, so it is a power of two, so
+ // multiplication by x is equivalent to a left shift by its
+ // base-2 logarithm. We calculate that unknown base-2 logarithm
+ // by shifting the deBruijn sequence and mapping the framed value.
+ int base2Log{mapping[(x * deBruijn) >> 58]};
+ return 63 - base2Log; // convert to leading zero count
+ }
+}
+
+inline constexpr int LeadingZeroBitCount(std::uint32_t x) {
+ return LeadingZeroBitCount(static_cast<std::uint64_t>(x)) - 32;
+}
+
+inline constexpr int LeadingZeroBitCount(std::uint16_t x) {
+ return LeadingZeroBitCount(static_cast<std::uint64_t>(x)) - 48;
+}
+
+namespace {
+static constexpr std::uint8_t eightBitLeadingZeroBitCount[256]{8, 7, 6, 6, 5, 5,
+ 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+}
+
+inline constexpr int LeadingZeroBitCount(std::uint8_t x) {
+ return eightBitLeadingZeroBitCount[x];
+}
+
+template <typename A> inline constexpr int BitsNeededFor(A x) {
+ return 8 * sizeof x - LeadingZeroBitCount(x);
+}
+} // namespace Fortran::common
+#endif // FORTRAN_COMMON_LEADING_ZERO_BIT_COUNT_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/optional.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/optional.h
new file mode 100644
index 00000000000..72991111be5
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/optional.h
@@ -0,0 +1,242 @@
+//===-- include/flang/Common/optional.h -------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Implementation of std::optional borrowed from LLVM's
+// libc/src/__support/CPP/optional.h with modifications (e.g. value_or, emplace
+// methods were added).
+//
+// The implementation defines optional in Fortran::common namespace.
+// This standalone implementation may be used if the target
+// does not support std::optional implementation (e.g. CUDA device env),
+// otherwise, Fortran::common::optional is an alias for std::optional.
+//
+// TODO: using libcu++ is the best option for CUDA, but there is a couple
+// of issues:
+// * Older CUDA toolkits' libcu++ implementations do not support optional.
+// * The include paths need to be set up such that all STD header files
+// are taken from libcu++.
+// * cuda:: namespace need to be forced for all std:: references.
+//
+//===----------------------------------------------------------------------===//
+#ifndef FORTRAN_COMMON_OPTIONAL_H
+#define FORTRAN_COMMON_OPTIONAL_H
+
+#include "api-attrs.h"
+#include <optional>
+
+#if !defined(STD_OPTIONAL_UNSUPPORTED) && \
+ (defined(__CUDACC__) || defined(__CUDA__)) && defined(__CUDA_ARCH__)
+#define STD_OPTIONAL_UNSUPPORTED 1
+#endif
+
+#define FORTRAN_OPTIONAL_INLINE_WITH_ATTRS inline RT_API_ATTRS
+#define FORTRAN_OPTIONAL_INLINE inline
+#define FORTRAN_OPTIONAL_INLINE_VAR inline
+
+namespace Fortran::common {
+
+#if STD_OPTIONAL_UNSUPPORTED
+// Trivial nullopt_t struct.
+struct nullopt_t {
+ constexpr explicit nullopt_t() = default;
+};
+
+// nullopt that can be used and returned.
+FORTRAN_OPTIONAL_INLINE_VAR constexpr nullopt_t nullopt{};
+
+// This is very simple implementation of the std::optional class. It makes
+// several assumptions that the underlying type is trivially constructible,
+// copyable, or movable.
+template <typename T> class optional {
+ template <typename U, bool = !std::is_trivially_destructible<U>::value>
+ struct OptionalStorage {
+ union {
+ char empty;
+ U stored_value;
+ };
+
+ bool in_use = false;
+
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS ~OptionalStorage() { reset(); }
+
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr OptionalStorage() : empty() {}
+
+ template <typename... Args>
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr explicit OptionalStorage(
+ std::in_place_t, Args &&...args)
+ : stored_value(std::forward<Args>(args)...) {}
+
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr void reset() {
+ if (in_use)
+ stored_value.~U();
+ in_use = false;
+ }
+ };
+
+ // The only difference is that this type U doesn't have a nontrivial
+ // destructor.
+ template <typename U> struct OptionalStorage<U, false> {
+ union {
+ char empty;
+ U stored_value;
+ };
+
+ bool in_use = false;
+
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr OptionalStorage() : empty() {}
+
+ template <typename... Args>
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr explicit OptionalStorage(
+ std::in_place_t, Args &&...args)
+ : stored_value(std::forward<Args>(args)...) {}
+
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr void reset() {
+ in_use = false;
+ }
+ };
+
+ OptionalStorage<T> storage;
+
+public:
+ // The default methods do not use RT_API_ATTRS, which causes
+ // warnings in CUDA compilation of form:
+ // __device__/__host__ annotation is ignored on a function .* that is
+ // explicitly defaulted on its first declaration
+ FORTRAN_OPTIONAL_INLINE constexpr optional() = default;
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr optional(nullopt_t) {}
+
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr optional(const T &t)
+ : storage(std::in_place, t) {
+ storage.in_use = true;
+ }
+ FORTRAN_OPTIONAL_INLINE constexpr optional(const optional &) = default;
+
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr optional(T &&t)
+ : storage(std::in_place, std::move(t)) {
+ storage.in_use = true;
+ }
+ FORTRAN_OPTIONAL_INLINE constexpr optional(optional &&O) = default;
+
+ template <typename... ArgTypes>
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr optional(
+ std::in_place_t, ArgTypes &&...Args)
+ : storage(std::in_place, std::forward<ArgTypes>(Args)...) {
+ storage.in_use = true;
+ }
+
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr optional &operator=(T &&t) {
+ storage.stored_value = std::move(t);
+ storage.in_use = true;
+ return *this;
+ }
+
+ FORTRAN_OPTIONAL_INLINE constexpr optional &operator=(optional &&) = default;
+
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr optional &operator=(const T &t) {
+ storage.stored_value = t;
+ storage.in_use = true;
+ return *this;
+ }
+
+ FORTRAN_OPTIONAL_INLINE constexpr optional &operator=(
+ const optional &) = default;
+
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr void reset() { storage.reset(); }
+
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr const T &value() const & {
+ return storage.stored_value;
+ }
+
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr T &value() & {
+ return storage.stored_value;
+ }
+
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr explicit operator bool() const {
+ return storage.in_use;
+ }
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr bool has_value() const {
+ return storage.in_use;
+ }
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr const T *operator->() const {
+ return &storage.stored_value;
+ }
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr T *operator->() {
+ return &storage.stored_value;
+ }
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr const T &operator*() const & {
+ return storage.stored_value;
+ }
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr T &operator*() & {
+ return storage.stored_value;
+ }
+
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr T &&value() && {
+ return std::move(storage.stored_value);
+ }
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr T &&operator*() && {
+ return std::move(storage.stored_value);
+ }
+
+ template <typename VT>
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr T value_or(
+ VT &&default_value) const & {
+ return storage.in_use ? storage.stored_value
+ : static_cast<T>(std::forward<VT>(default_value));
+ }
+
+ template <typename VT>
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr T value_or(
+ VT &&default_value) && {
+ return storage.in_use ? std::move(storage.stored_value)
+ : static_cast<T>(std::forward<VT>(default_value));
+ }
+
+ template <typename... ArgTypes>
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS
+ std::enable_if_t<std::is_constructible_v<T, ArgTypes &&...>, T &>
+ emplace(ArgTypes &&...args) {
+ reset();
+ new (reinterpret_cast<void *>(std::addressof(storage.stored_value)))
+ T(std::forward<ArgTypes>(args)...);
+ storage.in_use = true;
+ return value();
+ }
+
+ template <typename U = T,
+ std::enable_if_t<(std::is_constructible_v<T, U &&> &&
+ !std::is_same_v<std::decay_t<U>, std::in_place_t> &&
+ !std::is_same_v<std::decay_t<U>, optional> &&
+ std::is_convertible_v<U &&, T>),
+ bool> = true>
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS constexpr optional(U &&value) {
+ new (reinterpret_cast<void *>(std::addressof(storage.stored_value)))
+ T(std::forward<U>(value));
+ storage.in_use = true;
+ }
+
+ template <typename U = T,
+ std::enable_if_t<(std::is_constructible_v<T, U &&> &&
+ !std::is_same_v<std::decay_t<U>, std::in_place_t> &&
+ !std::is_same_v<std::decay_t<U>, optional> &&
+ !std::is_convertible_v<U &&, T>),
+ bool> = false>
+ FORTRAN_OPTIONAL_INLINE_WITH_ATTRS explicit constexpr optional(U &&value) {
+ new (reinterpret_cast<void *>(std::addressof(storage.stored_value)))
+ T(std::forward<U>(value));
+ storage.in_use = true;
+ }
+};
+#else // !STD_OPTIONAL_UNSUPPORTED
+using std::nullopt;
+using std::nullopt_t;
+using std::optional;
+#endif // !STD_OPTIONAL_UNSUPPORTED
+
+} // namespace Fortran::common
+
+#endif // FORTRAN_COMMON_OPTIONAL_H
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/real.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/real.h
new file mode 100644
index 00000000000..785cde3236b
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/real.h
@@ -0,0 +1,143 @@
+//===-- include/flang/Common/real.h -----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_COMMON_REAL_H_
+#define FORTRAN_COMMON_REAL_H_
+
+// Characteristics of IEEE-754 & related binary floating-point numbers.
+// The various representations are distinguished by their binary precisions
+// (number of explicit significand bits and any implicit MSB in the fraction).
+
+#include <cinttypes>
+
+namespace Fortran::common {
+
+// Total representation size in bits for each type
+static constexpr int BitsForBinaryPrecision(int binaryPrecision) {
+ switch (binaryPrecision) {
+ case 8: // IEEE single (truncated): 1+8+7 with implicit bit
+ return 16;
+ case 11: // IEEE half precision: 1+5+10 with implicit bit
+ return 16;
+ case 24: // IEEE single precision: 1+8+23 with implicit bit
+ return 32;
+ case 53: // IEEE double precision: 1+11+52 with implicit bit
+ return 64;
+ case 64: // x87 extended precision: 1+15+64, no implicit bit
+ return 80;
+ case 106: // "double-double": 2*(1+11+52 with implicit bit)
+ return 128;
+ case 113: // IEEE quad precision: 1+15+112 with implicit bit
+ return 128;
+ default:
+ return -1;
+ }
+}
+
+// Maximum number of significant decimal digits in the fraction of an
+// exact conversion in each type; computed by converting the value
+// with the minimum exponent (biased to 1) and all fractional bits set.
+static constexpr int MaxDecimalConversionDigits(int binaryPrecision) {
+ switch (binaryPrecision) {
+ case 8: // IEEE single (truncated): 1+8+7 with implicit bit
+ return 96;
+ case 11: // IEEE half precision: 1+5+10 with implicit bit
+ return 21;
+ case 24: // IEEE single precision: 1+8+23 with implicit bit
+ return 112;
+ case 53: // IEEE double precision: 1+11+52 with implicit bit
+ return 767;
+ case 64: // x87 extended precision: 1+15+64, no implicit bit
+ return 11514;
+ case 106: // "double-double": 2*(1+11+52 with implicit bit)
+ return 2 * 767;
+ case 113: // IEEE quad precision: 1+15+112 with implicit bit
+ return 11563;
+ default:
+ return -1;
+ }
+}
+
+static constexpr int MaxHexadecimalConversionDigits(int binaryPrecision) {
+ return binaryPrecision >= 0 ? (binaryPrecision + 3) / 4 : binaryPrecision;
+}
+
+static constexpr int RealKindForPrecision(int binaryPrecision) {
+ switch (binaryPrecision) {
+ case 8: // IEEE single (truncated): 1+8+7 with implicit bit
+ return 3;
+ case 11: // IEEE half precision: 1+5+10 with implicit bit
+ return 2;
+ case 24: // IEEE single precision: 1+8+23 with implicit bit
+ return 4;
+ case 53: // IEEE double precision: 1+11+52 with implicit bit
+ return 8;
+ case 64: // x87 extended precision: 1+15+64, no implicit bit
+ return 10;
+ // TODO: case 106: return kind for double/double
+ case 113: // IEEE quad precision: 1+15+112 with implicit bit
+ return 16;
+ default:
+ return -1;
+ }
+}
+
+static constexpr int PrecisionOfRealKind(int kind) {
+ switch (kind) {
+ case 2: // IEEE half precision: 1+5+10 with implicit bit
+ return 11;
+ case 3: // IEEE single (truncated): 1+8+7 with implicit bit
+ return 8;
+ case 4: // IEEE single precision: 1+8+23 with implicit bit
+ return 24;
+ case 8: // IEEE double precision: 1+11+52 with implicit bit
+ return 53;
+ case 10: // x87 extended precision: 1+15+64, no implicit bit
+ return 64;
+ // TODO: case kind for double/double: return 106;
+ case 16: // IEEE quad precision: 1+15+112 with implicit bit
+ return 113;
+ default:
+ return -1;
+ }
+}
+
+// RealCharacteristics is constexpr, but also useful when constructed
+// with a non-constant precision argument.
+class RealCharacteristics {
+public:
+ explicit constexpr RealCharacteristics(int p) : binaryPrecision{p} {}
+
+ int binaryPrecision;
+ int bits{BitsForBinaryPrecision(binaryPrecision)};
+ bool isImplicitMSB{binaryPrecision != 64 /*x87*/};
+ int significandBits{binaryPrecision - isImplicitMSB};
+ int exponentBits{bits - significandBits - 1 /*sign*/};
+ int maxExponent{(1 << exponentBits) - 1};
+ int exponentBias{maxExponent / 2};
+ int decimalPrecision{LogBaseTwoToLogBaseTen(binaryPrecision - 1)};
+ int decimalRange{LogBaseTwoToLogBaseTen(exponentBias - 1)};
+ // Number of significant decimal digits in the fraction of the
+ // exact conversion of the least nonzero subnormal.
+ int maxDecimalConversionDigits{MaxDecimalConversionDigits(binaryPrecision)};
+ int maxHexadecimalConversionDigits{
+ MaxHexadecimalConversionDigits(binaryPrecision)};
+
+private:
+ // Converts bit widths to whole decimal digits
+ static constexpr int LogBaseTwoToLogBaseTen(int logb2) {
+ constexpr std::int64_t LogBaseTenOfTwoTimesTenToThe12th{301029995664};
+ constexpr std::int64_t TenToThe12th{1000000000000};
+ std::int64_t logb10{
+ (logb2 * LogBaseTenOfTwoTimesTenToThe12th) / TenToThe12th};
+ return static_cast<int>(logb10);
+ }
+};
+
+} // namespace Fortran::common
+#endif // FORTRAN_COMMON_REAL_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/reference-wrapper.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/reference-wrapper.h
new file mode 100644
index 00000000000..85b2c6d5abc
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/reference-wrapper.h
@@ -0,0 +1,114 @@
+//===-- include/flang/Common/reference-wrapper.h ----------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+// clang-format off
+//
+// Implementation of std::reference_wrapper borrowed from libcu++
+// https://github.com/NVIDIA/libcudacxx/blob/f7e6cd07ed5ba826aeac0b742feafddfedc1e400/include/cuda/std/detail/libcxx/include/__functional/reference_wrapper.h#L1
+// with modifications.
+//
+// The original source code is distributed under the Apache License v2.0
+// with LLVM Exceptions.
+//
+// TODO: using libcu++ is the best option for CUDA, but there is a couple
+// of issues:
+// * The include paths need to be set up such that all STD header files
+// are taken from libcu++.
+// * cuda:: namespace need to be forced for all std:: references.
+//
+// clang-format on
+
+#ifndef FORTRAN_COMMON_REFERENCE_WRAPPER_H
+#define FORTRAN_COMMON_REFERENCE_WRAPPER_H
+
+#include "api-attrs.h"
+#include <functional>
+#include <type_traits>
+
+#if !defined(STD_REFERENCE_WRAPPER_UNSUPPORTED) && \
+ (defined(__CUDACC__) || defined(__CUDA__)) && defined(__CUDA_ARCH__)
+#define STD_REFERENCE_WRAPPER_UNSUPPORTED 1
+#endif
+
+namespace Fortran::common {
+
+template <class _Tp>
+using __remove_cvref_t = std::remove_cv_t<std::remove_reference_t<_Tp>>;
+template <class _Tp, class _Up>
+struct __is_same_uncvref
+ : std::is_same<__remove_cvref_t<_Tp>, __remove_cvref_t<_Up>> {};
+
+#if STD_REFERENCE_WRAPPER_UNSUPPORTED
+template <class _Tp> class reference_wrapper {
+public:
+ // types
+ typedef _Tp type;
+
+private:
+ type *__f_;
+
+ static RT_API_ATTRS void __fun(_Tp &);
+ static void __fun(_Tp &&) = delete;
+
+public:
+ template <class _Up,
+ class =
+ std::enable_if_t<!__is_same_uncvref<_Up, reference_wrapper>::value,
+ decltype(__fun(std::declval<_Up>()))>>
+ constexpr RT_API_ATTRS reference_wrapper(_Up &&__u) {
+ type &__f = static_cast<_Up &&>(__u);
+ __f_ = std::addressof(__f);
+ }
+
+ // access
+ constexpr RT_API_ATTRS operator type &() const { return *__f_; }
+ constexpr RT_API_ATTRS type &get() const { return *__f_; }
+
+ // invoke
+ template <class... _ArgTypes>
+ constexpr RT_API_ATTRS typename std::invoke_result_t<type &, _ArgTypes...>
+ operator()(_ArgTypes &&...__args) const {
+ return std::invoke(get(), std::forward<_ArgTypes>(__args)...);
+ }
+};
+
+template <class _Tp> reference_wrapper(_Tp &) -> reference_wrapper<_Tp>;
+
+template <class _Tp>
+inline constexpr RT_API_ATTRS reference_wrapper<_Tp> ref(_Tp &__t) {
+ return reference_wrapper<_Tp>(__t);
+}
+
+template <class _Tp>
+inline constexpr RT_API_ATTRS reference_wrapper<_Tp> ref(
+ reference_wrapper<_Tp> __t) {
+ return __t;
+}
+
+template <class _Tp>
+inline constexpr RT_API_ATTRS reference_wrapper<const _Tp> cref(
+ const _Tp &__t) {
+ return reference_wrapper<const _Tp>(__t);
+}
+
+template <class _Tp>
+inline constexpr RT_API_ATTRS reference_wrapper<const _Tp> cref(
+ reference_wrapper<_Tp> __t) {
+ return __t;
+}
+
+template <class _Tp> void ref(const _Tp &&) = delete;
+template <class _Tp> void cref(const _Tp &&) = delete;
+#else // !STD_REFERENCE_WRAPPER_UNSUPPORTED
+using std::cref;
+using std::ref;
+using std::reference_wrapper;
+#endif // !STD_REFERENCE_WRAPPER_UNSUPPORTED
+
+} // namespace Fortran::common
+
+#endif // FORTRAN_COMMON_REFERENCE_WRAPPER_H
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/restorer.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/restorer.h
new file mode 100644
index 00000000000..c18c13e351c
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/restorer.h
@@ -0,0 +1,56 @@
+//===-- include/flang/Common/restorer.h -------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Utility: before overwriting a variable, capture its value and
+// ensure that it will be restored when the Restorer goes out of scope.
+//
+// int x{3};
+// {
+// auto save{common::ScopedSet(x, 4)};
+// // x is now 4
+// }
+// // x is back to 3
+
+#ifndef FORTRAN_COMMON_RESTORER_H_
+#define FORTRAN_COMMON_RESTORER_H_
+#include "api-attrs.h"
+#include "idioms.h"
+namespace Fortran::common {
+template <typename A> class Restorer {
+public:
+ explicit RT_API_ATTRS Restorer(A &p, A original)
+ : p_{p}, original_{std::move(original)} {}
+ RT_API_ATTRS ~Restorer() { p_ = std::move(original_); }
+
+ // Inhibit any recreation of this restorer that would result in two restorers
+ // trying to restore the same reference.
+ Restorer(const Restorer &) = delete;
+ Restorer(Restorer &&that) = delete;
+ const Restorer &operator=(const Restorer &) = delete;
+ const Restorer &operator=(Restorer &&that) = delete;
+
+private:
+ A &p_;
+ A original_;
+};
+
+template <typename A, typename B>
+RT_API_ATTRS common::IfNoLvalue<Restorer<A>, B> ScopedSet(A &to, B &&from) {
+ A original{std::move(to)};
+ to = std::move(from);
+ return Restorer<A>{to, std::move(original)};
+}
+template <typename A, typename B>
+RT_API_ATTRS common::IfNoLvalue<Restorer<A>, B> ScopedSet(
+ A &to, const B &from) {
+ A original{std::move(to)};
+ to = from;
+ return Restorer<A>{to, std::move(original)};
+}
+} // namespace Fortran::common
+#endif // FORTRAN_COMMON_RESTORER_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/type-kinds.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/type-kinds.h
new file mode 100644
index 00000000000..4e5c4f69fcc
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/type-kinds.h
@@ -0,0 +1,63 @@
+//===-- include/flang/Common/type-kinds.h -----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_COMMON_TYPE_KINDS_H_
+#define FORTRAN_COMMON_TYPE_KINDS_H_
+
+#include "Fortran-consts.h"
+#include "real.h"
+#include <cinttypes>
+
+namespace Fortran::common {
+
+static constexpr int maxKind{16};
+
+// A predicate that is true when a kind value is a kind that could possibly
+// be supported for an intrinsic type category on some target instruction
+// set architecture.
+static constexpr bool IsValidKindOfIntrinsicType(
+ TypeCategory category, std::int64_t kind) {
+ switch (category) {
+ case TypeCategory::Integer:
+ case TypeCategory::Unsigned:
+ return kind == 1 || kind == 2 || kind == 4 || kind == 8 || kind == 16;
+ case TypeCategory::Real:
+ case TypeCategory::Complex:
+ return kind == 2 || kind == 3 || kind == 4 || kind == 8 || kind == 10 ||
+ kind == 16;
+ case TypeCategory::Character:
+ return kind == 1 || kind == 2 || kind == 4;
+ case TypeCategory::Logical:
+ return kind == 1 || kind == 2 || kind == 4 || kind == 8;
+ default:
+ return false;
+ }
+}
+
+static constexpr int TypeSizeInBytes(TypeCategory category, std::int64_t kind) {
+ if (IsValidKindOfIntrinsicType(category, kind)) {
+ if (category == TypeCategory::Real || category == TypeCategory::Complex) {
+ int precision{PrecisionOfRealKind(kind)};
+ int bits{BitsForBinaryPrecision(precision)};
+ if (bits == 80) { // x87 is stored in 16-byte containers
+ bits = 128;
+ }
+ if (category == TypeCategory::Complex) {
+ bits *= 2;
+ }
+ return bits >> 3;
+ } else {
+ return kind;
+ }
+ } else {
+ return -1;
+ }
+}
+
+} // namespace Fortran::common
+#endif // FORTRAN_COMMON_TYPE_KINDS_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/uint128.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/uint128.h
new file mode 100644
index 00000000000..c4bc4689a1e
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/uint128.h
@@ -0,0 +1,308 @@
+//===-- include/flang/Common/uint128.h --------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Portable 128-bit integer arithmetic for use in impoverished C++
+// implementations lacking __uint128_t & __int128_t.
+
+#ifndef FORTRAN_COMMON_UINT128_H_
+#define FORTRAN_COMMON_UINT128_H_
+
+// Define AVOID_NATIVE_UINT128_T to force the use of UnsignedInt128 below
+// instead of the C++ compiler's native 128-bit unsigned integer type, if
+// it has one.
+#ifndef AVOID_NATIVE_UINT128_T
+#define AVOID_NATIVE_UINT128_T 0
+#endif
+
+#include "api-attrs.h"
+#include "leading-zero-bit-count.h"
+#include <cstdint>
+#include <type_traits>
+
+namespace Fortran::common {
+
+template <bool IS_SIGNED = false> class Int128 {
+public:
+ constexpr Int128() {}
+ // This means of definition provides some portability for
+ // "size_t" operands.
+ constexpr Int128(unsigned n) : low_{n} {}
+ constexpr Int128(unsigned long n) : low_{n} {}
+ constexpr Int128(unsigned long long n) : low_{n} {}
+ constexpr Int128(int n) {
+ low_ = static_cast<std::uint64_t>(n);
+ high_ = -static_cast<std::uint64_t>(n < 0);
+ }
+ constexpr Int128(long n) {
+ low_ = static_cast<std::uint64_t>(n);
+ high_ = -static_cast<std::uint64_t>(n < 0);
+ }
+ constexpr Int128(long long n) {
+ low_ = static_cast<std::uint64_t>(n);
+ high_ = -static_cast<std::uint64_t>(n < 0);
+ }
+ constexpr Int128(const Int128 &) = default;
+ constexpr Int128(Int128 &&) = default;
+ constexpr Int128 &operator=(const Int128 &) = default;
+ constexpr Int128 &operator=(Int128 &&) = default;
+
+ explicit constexpr Int128(const Int128<!IS_SIGNED> &n)
+ : low_{n.low()}, high_{n.high()} {}
+ explicit constexpr Int128(Int128<!IS_SIGNED> &&n)
+ : low_{n.low()}, high_{n.high()} {}
+
+ constexpr Int128 operator+() const { return *this; }
+ constexpr Int128 operator~() const { return {~high_, ~low_}; }
+ constexpr Int128 operator-() const { return ~*this + 1; }
+ constexpr bool operator!() const { return !low_ && !high_; }
+ constexpr explicit operator bool() const { return low_ || high_; }
+ constexpr explicit operator std::uint64_t() const { return low_; }
+ constexpr explicit operator std::int64_t() const { return low_; }
+ constexpr explicit operator int() const { return static_cast<int>(low_); }
+
+ constexpr std::uint64_t high() const { return high_; }
+ constexpr std::uint64_t low() const { return low_; }
+
+ constexpr Int128 operator++(/*prefix*/) {
+ *this += 1;
+ return *this;
+ }
+ constexpr Int128 operator++(int /*postfix*/) {
+ Int128 result{*this};
+ *this += 1;
+ return result;
+ }
+ constexpr Int128 operator--(/*prefix*/) {
+ *this -= 1;
+ return *this;
+ }
+ constexpr Int128 operator--(int /*postfix*/) {
+ Int128 result{*this};
+ *this -= 1;
+ return result;
+ }
+
+ constexpr Int128 operator&(Int128 that) const {
+ return {high_ & that.high_, low_ & that.low_};
+ }
+ constexpr Int128 operator|(Int128 that) const {
+ return {high_ | that.high_, low_ | that.low_};
+ }
+ constexpr Int128 operator^(Int128 that) const {
+ return {high_ ^ that.high_, low_ ^ that.low_};
+ }
+
+ constexpr Int128 operator<<(Int128 that) const {
+ if (that >= 128) {
+ return {};
+ } else if (that == 0) {
+ return *this;
+ } else {
+ std::uint64_t n{that.low_};
+ if (n >= 64) {
+ return {low_ << (n - 64), 0};
+ } else {
+ return {(high_ << n) | (low_ >> (64 - n)), low_ << n};
+ }
+ }
+ }
+ constexpr Int128 operator>>(Int128 that) const {
+ if (that >= 128) {
+ return {};
+ } else if (that == 0) {
+ return *this;
+ } else {
+ std::uint64_t n{that.low_};
+ if (n >= 64) {
+ return {0, high_ >> (n - 64)};
+ } else {
+ return {high_ >> n, (high_ << (64 - n)) | (low_ >> n)};
+ }
+ }
+ }
+
+ constexpr Int128 operator+(Int128 that) const {
+ std::uint64_t lower{(low_ & ~topBit) + (that.low_ & ~topBit)};
+ bool carry{((lower >> 63) + (low_ >> 63) + (that.low_ >> 63)) > 1};
+ return {high_ + that.high_ + carry, low_ + that.low_};
+ }
+ constexpr Int128 operator-(Int128 that) const { return *this + -that; }
+
+ constexpr Int128 operator*(Int128 that) const {
+ std::uint64_t mask32{0xffffffff};
+ if (high_ == 0 && that.high_ == 0) {
+ std::uint64_t x0{low_ & mask32}, x1{low_ >> 32};
+ std::uint64_t y0{that.low_ & mask32}, y1{that.low_ >> 32};
+ Int128 x0y0{x0 * y0}, x0y1{x0 * y1};
+ Int128 x1y0{x1 * y0}, x1y1{x1 * y1};
+ return x0y0 + ((x0y1 + x1y0) << 32) + (x1y1 << 64);
+ } else {
+ std::uint64_t x0{low_ & mask32}, x1{low_ >> 32}, x2{high_ & mask32},
+ x3{high_ >> 32};
+ std::uint64_t y0{that.low_ & mask32}, y1{that.low_ >> 32},
+ y2{that.high_ & mask32}, y3{that.high_ >> 32};
+ Int128 x0y0{x0 * y0}, x0y1{x0 * y1}, x0y2{x0 * y2}, x0y3{x0 * y3};
+ Int128 x1y0{x1 * y0}, x1y1{x1 * y1}, x1y2{x1 * y2};
+ Int128 x2y0{x2 * y0}, x2y1{x2 * y1};
+ Int128 x3y0{x3 * y0};
+ return x0y0 + ((x0y1 + x1y0) << 32) + ((x0y2 + x1y1 + x2y0) << 64) +
+ ((x0y3 + x1y2 + x2y1 + x3y0) << 96);
+ }
+ }
+
+ constexpr Int128 operator/(Int128 that) const {
+ int j{LeadingZeroes()};
+ Int128 bits{*this};
+ bits <<= j;
+ Int128 numerator{};
+ Int128 quotient{};
+ for (; j < 128; ++j) {
+ numerator <<= 1;
+ if (bits.high_ & topBit) {
+ numerator.low_ |= 1;
+ }
+ bits <<= 1;
+ quotient <<= 1;
+ if (numerator >= that) {
+ ++quotient;
+ numerator -= that;
+ }
+ }
+ return quotient;
+ }
+
+ constexpr Int128 operator%(Int128 that) const {
+ int j{LeadingZeroes()};
+ Int128 bits{*this};
+ bits <<= j;
+ Int128 remainder{};
+ for (; j < 128; ++j) {
+ remainder <<= 1;
+ if (bits.high_ & topBit) {
+ remainder.low_ |= 1;
+ }
+ bits <<= 1;
+ if (remainder >= that) {
+ remainder -= that;
+ }
+ }
+ return remainder;
+ }
+
+ constexpr bool operator<(Int128 that) const {
+ if (IS_SIGNED && (high_ ^ that.high_) & topBit) {
+ return (high_ & topBit) != 0;
+ }
+ return high_ < that.high_ || (high_ == that.high_ && low_ < that.low_);
+ }
+ constexpr bool operator<=(Int128 that) const { return !(*this > that); }
+ constexpr bool operator==(Int128 that) const {
+ return low_ == that.low_ && high_ == that.high_;
+ }
+ constexpr bool operator!=(Int128 that) const { return !(*this == that); }
+ constexpr bool operator>=(Int128 that) const { return that <= *this; }
+ constexpr bool operator>(Int128 that) const { return that < *this; }
+
+ constexpr Int128 &operator&=(const Int128 &that) {
+ *this = *this & that;
+ return *this;
+ }
+ constexpr Int128 &operator|=(const Int128 &that) {
+ *this = *this | that;
+ return *this;
+ }
+ constexpr Int128 &operator^=(const Int128 &that) {
+ *this = *this ^ that;
+ return *this;
+ }
+ constexpr Int128 &operator<<=(const Int128 &that) {
+ *this = *this << that;
+ return *this;
+ }
+ constexpr Int128 &operator>>=(const Int128 &that) {
+ *this = *this >> that;
+ return *this;
+ }
+ constexpr Int128 &operator+=(const Int128 &that) {
+ *this = *this + that;
+ return *this;
+ }
+ constexpr Int128 &operator-=(const Int128 &that) {
+ *this = *this - that;
+ return *this;
+ }
+ constexpr Int128 &operator*=(const Int128 &that) {
+ *this = *this * that;
+ return *this;
+ }
+ constexpr Int128 &operator/=(const Int128 &that) {
+ *this = *this / that;
+ return *this;
+ }
+ constexpr Int128 &operator%=(const Int128 &that) {
+ *this = *this % that;
+ return *this;
+ }
+
+private:
+ constexpr Int128(std::uint64_t hi, std::uint64_t lo) {
+ low_ = lo;
+ high_ = hi;
+ }
+ constexpr int LeadingZeroes() const {
+ if (high_ == 0) {
+ return 64 + LeadingZeroBitCount(low_);
+ } else {
+ return LeadingZeroBitCount(high_);
+ }
+ }
+ RT_VAR_GROUP_BEGIN
+ static constexpr std::uint64_t topBit{std::uint64_t{1} << 63};
+ RT_VAR_GROUP_END
+#if FLANG_LITTLE_ENDIAN
+ std::uint64_t low_{0}, high_{0};
+#elif FLANG_BIG_ENDIAN
+ std::uint64_t high_{0}, low_{0};
+#else
+#error host endianness is not known
+#endif
+};
+
+using UnsignedInt128 = Int128<false>;
+using SignedInt128 = Int128<true>;
+
+#if !AVOID_NATIVE_UINT128_T && (defined __GNUC__ || defined __clang__) && \
+ defined __SIZEOF_INT128__
+#define USING_NATIVE_INT128_T 1
+using uint128_t = __uint128_t;
+using int128_t = __int128_t;
+#else
+#undef USING_NATIVE_INT128_T
+using uint128_t = UnsignedInt128;
+using int128_t = SignedInt128;
+#endif
+
+template <int BITS> struct HostUnsignedIntTypeHelper {
+ using type = std::conditional_t<(BITS <= 8), std::uint8_t,
+ std::conditional_t<(BITS <= 16), std::uint16_t,
+ std::conditional_t<(BITS <= 32), std::uint32_t,
+ std::conditional_t<(BITS <= 64), std::uint64_t, uint128_t>>>>;
+};
+template <int BITS> struct HostSignedIntTypeHelper {
+ using type = std::conditional_t<(BITS <= 8), std::int8_t,
+ std::conditional_t<(BITS <= 16), std::int16_t,
+ std::conditional_t<(BITS <= 32), std::int32_t,
+ std::conditional_t<(BITS <= 64), std::int64_t, int128_t>>>>;
+};
+template <int BITS>
+using HostUnsignedIntType = typename HostUnsignedIntTypeHelper<BITS>::type;
+template <int BITS>
+using HostSignedIntType = typename HostSignedIntTypeHelper<BITS>::type;
+
+} // namespace Fortran::common
+#endif
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/variant.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/variant.h
new file mode 100644
index 00000000000..4fff267c93d
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/variant.h
@@ -0,0 +1,30 @@
+//===-- include/flang/Common/variant.h --------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// A single way to expose C++ variant class in files that can be used
+// in F18 runtime build. With inclusion of this file std::variant
+// and the related names become available, though, they may correspond
+// to alternative definitions (e.g. from cuda::std namespace).
+
+#ifndef FORTRAN_COMMON_VARIANT_H
+#define FORTRAN_COMMON_VARIANT_H
+
+#if RT_USE_LIBCUDACXX
+#error #include <cuda/std/variant>
+namespace std {
+using cuda::std::get;
+using cuda::std::monostate;
+using cuda::std::variant;
+using cuda::std::variant_size_v;
+using cuda::std::visit;
+} // namespace std
+#else // !RT_USE_LIBCUDACXX
+#include <variant>
+#endif // !RT_USE_LIBCUDACXX
+
+#endif // FORTRAN_COMMON_VARIANT_H
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/visit.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/visit.h
new file mode 100644
index 00000000000..1a84102b566
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/visit.h
@@ -0,0 +1,103 @@
+//===-- include/flang/Common/visit.h ----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// common::visit() is a drop-in replacement for std::visit() that reduces both
+// compiler build time and compiler execution time modestly, and reduces
+// compiler build memory requirements significantly (overall & maximum).
+// It does not require redefinition of std::variant<>.
+//
+// The C++ standard mandates that std::visit be O(1), but most variants are
+// small and O(logN) is faster in practice to compile and execute, avoiding
+// the need to build a dispatch table.
+//
+// Define FLANG_USE_STD_VISIT to avoid this code and make common::visit() an
+// alias for ::std::visit().
+
+#ifndef FORTRAN_COMMON_VISIT_H_
+#define FORTRAN_COMMON_VISIT_H_
+
+#include "api-attrs.h"
+#include "variant.h"
+#include <type_traits>
+
+namespace Fortran::common {
+namespace log2visit {
+
+template <std::size_t LOW, std::size_t HIGH, typename RESULT, typename VISITOR,
+ typename... VARIANT>
+RT_DEVICE_NOINLINE_HOST_INLINE RT_API_ATTRS RESULT Log2VisitHelper(
+ VISITOR &&visitor, std::size_t which, VARIANT &&...u) {
+ if constexpr (LOW + 7 >= HIGH) {
+ switch (which - LOW) {
+#define VISIT_CASE_N(N) \
+ case N: \
+ if constexpr (LOW + N <= HIGH) { \
+ return visitor(std::get<(LOW + N)>(std::forward<VARIANT>(u))...); \
+ }
+ VISIT_CASE_N(1)
+ [[fallthrough]];
+ VISIT_CASE_N(2)
+ [[fallthrough]];
+ VISIT_CASE_N(3)
+ [[fallthrough]];
+ VISIT_CASE_N(4)
+ [[fallthrough]];
+ VISIT_CASE_N(5)
+ [[fallthrough]];
+ VISIT_CASE_N(6)
+ [[fallthrough]];
+ VISIT_CASE_N(7)
+#undef VISIT_CASE_N
+ }
+ return visitor(std::get<LOW>(std::forward<VARIANT>(u))...);
+ } else {
+ static constexpr std::size_t mid{(HIGH + LOW) / 2};
+ if (which <= mid) {
+ return Log2VisitHelper<LOW, mid, RESULT>(
+ std::forward<VISITOR>(visitor), which, std::forward<VARIANT>(u)...);
+ } else {
+ return Log2VisitHelper<(mid + 1), HIGH, RESULT>(
+ std::forward<VISITOR>(visitor), which, std::forward<VARIANT>(u)...);
+ }
+ }
+}
+
+template <typename VISITOR, typename... VARIANT>
+RT_DEVICE_NOINLINE_HOST_INLINE RT_API_ATTRS auto
+visit(VISITOR &&visitor, VARIANT &&...u) -> decltype(visitor(std::get<0>(
+ std::forward<VARIANT>(u))...)) {
+ using Result = decltype(visitor(std::get<0>(std::forward<VARIANT>(u))...));
+ if constexpr (sizeof...(u) == 1) {
+ static constexpr std::size_t high{
+ (std::variant_size_v<std::decay_t<decltype(u)>> * ...) - 1};
+ return Log2VisitHelper<0, high, Result>(std::forward<VISITOR>(visitor),
+ u.index()..., std::forward<VARIANT>(u)...);
+ } else {
+ // TODO: figure out how to do multiple variant arguments
+ return ::std::visit(
+ std::forward<VISITOR>(visitor), std::forward<VARIANT>(u)...);
+ }
+}
+
+} // namespace log2visit
+
+// Some versions of clang have bugs that cause compilation to hang
+// on these templates. MSVC and older GCC versions may work but are
+// not well tested. So enable only for GCC 9 and better.
+#if __GNUC__ < 9 && !defined(__clang__)
+#define FLANG_USE_STD_VISIT
+#endif
+
+#ifdef FLANG_USE_STD_VISIT
+using ::std::visit;
+#else
+using Fortran::common::log2visit::visit;
+#endif
+
+} // namespace Fortran::common
+#endif // FORTRAN_COMMON_VISIT_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Common/windows-include.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/windows-include.h
new file mode 100644
index 00000000000..01bc6fc9eb9
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Common/windows-include.h
@@ -0,0 +1,29 @@
+//===-- include/flang/Common/windows-include.h ------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Wrapper around windows.h that works around the name conflicts.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_COMMON_WINDOWS_INCLUDE_H_
+#define FORTRAN_COMMON_WINDOWS_INCLUDE_H_
+
+#ifdef _WIN32
+
+#define WIN32_LEAN_AND_MEAN
+#define NOMINMAX
+
+// Target Windows 2000 and above. This is needed for newer Windows API
+// functions, e.g. GetComputerNameExA()
+#define _WIN32_WINNT 0x0500
+
+#include <windows.h>
+
+#endif // _WIN32
+
+#endif // FORTRAN_COMMON_WINDOWS_INCLUDE_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Decimal/binary-floating-point.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Decimal/binary-floating-point.h
new file mode 100644
index 00000000000..1e0cde97d98
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Decimal/binary-floating-point.h
@@ -0,0 +1,211 @@
+//===-- include/flang/Decimal/binary-floating-point.h -----------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_DECIMAL_BINARY_FLOATING_POINT_H_
+#define FORTRAN_DECIMAL_BINARY_FLOATING_POINT_H_
+
+// Access and manipulate the fields of an IEEE-754 binary
+// floating-point value via a generalized template.
+
+#include "flang/Common/api-attrs.h"
+#include "flang/Common/real.h"
+#include "flang/Common/uint128.h"
+#include <cinttypes>
+#include <climits>
+#include <cstring>
+#include <type_traits>
+
+namespace Fortran::decimal {
+
+enum FortranRounding {
+ RoundNearest, /* RN and RP */
+ RoundUp, /* RU */
+ RoundDown, /* RD */
+ RoundToZero, /* RZ - no rounding */
+ RoundCompatible, /* RC: like RN, but ties go away from 0 */
+};
+
+template <int BINARY_PRECISION> class BinaryFloatingPointNumber {
+public:
+ static constexpr common::RealCharacteristics realChars{BINARY_PRECISION};
+ static constexpr int binaryPrecision{BINARY_PRECISION};
+ static constexpr int bits{realChars.bits};
+ static constexpr int isImplicitMSB{realChars.isImplicitMSB};
+ static constexpr int significandBits{realChars.significandBits};
+ static constexpr int exponentBits{realChars.exponentBits};
+ static constexpr int exponentBias{realChars.exponentBias};
+ static constexpr int maxExponent{realChars.maxExponent};
+ static constexpr int decimalPrecision{realChars.decimalPrecision};
+ static constexpr int decimalRange{realChars.decimalRange};
+ static constexpr int maxDecimalConversionDigits{
+ realChars.maxDecimalConversionDigits};
+
+ using RawType = common::HostUnsignedIntType<bits>;
+ static_assert(CHAR_BIT * sizeof(RawType) >= bits);
+ RT_OFFLOAD_VAR_GROUP_BEGIN
+ static constexpr RawType significandMask{(RawType{1} << significandBits) - 1};
+
+ constexpr RT_API_ATTRS BinaryFloatingPointNumber() {} // zero
+ RT_OFFLOAD_VAR_GROUP_END
+ constexpr BinaryFloatingPointNumber(
+ const BinaryFloatingPointNumber &that) = default;
+ constexpr BinaryFloatingPointNumber(
+ BinaryFloatingPointNumber &&that) = default;
+ constexpr BinaryFloatingPointNumber &operator=(
+ const BinaryFloatingPointNumber &that) = default;
+ constexpr BinaryFloatingPointNumber &operator=(
+ BinaryFloatingPointNumber &&that) = default;
+ constexpr explicit RT_API_ATTRS BinaryFloatingPointNumber(RawType raw)
+ : raw_{raw} {}
+
+ RT_API_ATTRS RawType raw() const { return raw_; }
+
+ template <typename A>
+ explicit constexpr RT_API_ATTRS BinaryFloatingPointNumber(A x) {
+ static_assert(sizeof raw_ <= sizeof x);
+ std::memcpy(reinterpret_cast<void *>(&raw_),
+ reinterpret_cast<const void *>(&x), sizeof raw_);
+ }
+
+ constexpr RT_API_ATTRS int BiasedExponent() const {
+ return static_cast<int>(
+ (raw_ >> significandBits) & ((1 << exponentBits) - 1));
+ }
+ constexpr RT_API_ATTRS int UnbiasedExponent() const {
+ int biased{BiasedExponent()};
+ return biased - exponentBias + (biased == 0);
+ }
+ constexpr RT_API_ATTRS RawType Significand() const {
+ return raw_ & significandMask;
+ }
+ constexpr RT_API_ATTRS RawType Fraction() const {
+ RawType sig{Significand()};
+ if (isImplicitMSB && BiasedExponent() > 0) {
+ sig |= RawType{1} << significandBits;
+ }
+ return sig;
+ }
+
+ constexpr RT_API_ATTRS bool IsZero() const {
+ return (raw_ & ((RawType{1} << (bits - 1)) - 1)) == 0;
+ }
+ constexpr RT_API_ATTRS bool IsNaN() const {
+ auto expo{BiasedExponent()};
+ auto sig{Significand()};
+ if constexpr (bits == 80) { // x87
+ if (expo == maxExponent) {
+ return sig != (significandMask >> 1) + 1;
+ } else {
+ return expo != 0 && !(sig & (RawType{1} << (significandBits - 1)));
+ ;
+ }
+ } else {
+ return expo == maxExponent && sig != 0;
+ }
+ }
+ constexpr RT_API_ATTRS bool IsInfinite() const {
+ if constexpr (bits == 80) { // x87
+ return BiasedExponent() == maxExponent &&
+ Significand() == ((significandMask >> 1) + 1);
+ } else {
+ return BiasedExponent() == maxExponent && Significand() == 0;
+ }
+ }
+ constexpr RT_API_ATTRS bool IsMaximalFiniteMagnitude() const {
+ return BiasedExponent() == maxExponent - 1 &&
+ Significand() == significandMask;
+ }
+ constexpr RT_API_ATTRS bool IsNegative() const {
+ return ((raw_ >> (bits - 1)) & 1) != 0;
+ }
+
+ constexpr RT_API_ATTRS void Negate() { raw_ ^= RawType{1} << (bits - 1); }
+
+ // For calculating the nearest neighbors of a floating-point value
+ constexpr RT_API_ATTRS void Previous() {
+ RemoveExplicitMSB();
+ --raw_;
+ InsertExplicitMSB();
+ }
+ constexpr RT_API_ATTRS void Next() {
+ RemoveExplicitMSB();
+ ++raw_;
+ InsertExplicitMSB();
+ }
+
+ static constexpr RT_API_ATTRS BinaryFloatingPointNumber Infinity(
+ bool isNegative) {
+ RawType result{RawType{maxExponent} << significandBits};
+ if (isNegative) {
+ result |= RawType{1} << (bits - 1);
+ }
+ return BinaryFloatingPointNumber{result};
+ }
+
+ // Returns true when the result is exact
+ constexpr RT_API_ATTRS bool RoundToBits(
+ int keepBits, enum FortranRounding mode) {
+ if (IsNaN() || IsInfinite() || keepBits >= binaryPrecision) {
+ return true;
+ }
+ int lostBits{keepBits < binaryPrecision ? binaryPrecision - keepBits : 0};
+ RawType lostMask{static_cast<RawType>((RawType{1} << lostBits) - 1)};
+ if (RawType lost{static_cast<RawType>(raw_ & lostMask)}; lost != 0) {
+ bool increase{false};
+ switch (mode) {
+ case RoundNearest:
+ if (lost >> (lostBits - 1) != 0) { // >= tie
+ if ((lost & (lostMask >> 1)) != 0) {
+ increase = true; // > tie
+ } else {
+ increase = ((raw_ >> lostBits) & 1) != 0; // tie to even
+ }
+ }
+ break;
+ case RoundUp:
+ increase = !IsNegative();
+ break;
+ case RoundDown:
+ increase = IsNegative();
+ break;
+ case RoundToZero:
+ break;
+ case RoundCompatible:
+ increase = lost >> (lostBits - 1) != 0; // >= tie
+ break;
+ }
+ if (increase) {
+ raw_ |= lostMask;
+ Next();
+ }
+ return false; // inexact
+ } else {
+ return true; // exact
+ }
+ }
+
+private:
+ constexpr RT_API_ATTRS void RemoveExplicitMSB() {
+ if constexpr (!isImplicitMSB) {
+ raw_ = (raw_ & (significandMask >> 1)) | ((raw_ & ~significandMask) >> 1);
+ }
+ }
+ constexpr RT_API_ATTRS void InsertExplicitMSB() {
+ if constexpr (!isImplicitMSB) {
+ constexpr RawType mask{significandMask >> 1};
+ raw_ = (raw_ & mask) | ((raw_ & ~mask) << 1);
+ if (BiasedExponent() > 0) {
+ raw_ |= RawType{1} << (significandBits - 1);
+ }
+ }
+ }
+
+ RawType raw_{0};
+};
+} // namespace Fortran::decimal
+#endif
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Decimal/decimal.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Decimal/decimal.h
new file mode 100644
index 00000000000..5e81e47a182
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Decimal/decimal.h
@@ -0,0 +1,146 @@
+/*===-- include/flang/Decimal/decimal.h ---------------------------*- C++ -*-===
+ *
+ * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+ * See https://llvm.org/LICENSE.txt for license information.
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ *
+ * ===-----------------------------------------------------------------------===
+ */
+
+/* C and C++ API for binary-to/from-decimal conversion package. */
+
+#ifndef FORTRAN_DECIMAL_DECIMAL_H_
+#define FORTRAN_DECIMAL_DECIMAL_H_
+
+#include "flang/Common/api-attrs.h"
+#include <stddef.h>
+
+#ifdef __cplusplus
+// Binary-to-decimal conversions (formatting) produce a sequence of decimal
+// digit characters in a NUL-terminated user-supplied buffer that constitute
+// a decimal fraction (or zero), accompanied by a decimal exponent that
+// you'll get to adjust and format yourself. There can be a leading sign
+// character.
+// Negative zero is "-0". The result can also be "NaN", "Inf", "+Inf",
+// or "-Inf".
+// If the conversion can't fit in the user-supplied buffer, a null pointer
+// is returned.
+
+#include "binary-floating-point.h"
+namespace Fortran::decimal {
+#endif /* C++ */
+
+enum ConversionResultFlags {
+ Exact = 0,
+ Overflow = 1,
+ Inexact = 2,
+ Invalid = 4,
+ Underflow = 8,
+};
+
+struct ConversionToDecimalResult {
+ const char *str; /* may not be original buffer pointer; null if overflow */
+ size_t length; /* does not include NUL terminator */
+ int decimalExponent; /* assuming decimal point to the left of first digit */
+ enum ConversionResultFlags flags;
+};
+
+/* The "minimize" flag causes the fewest number of output digits
+ * to be emitted such that reading them back into the same binary
+ * floating-point format with RoundNearest will return the same
+ * value.
+ */
+enum DecimalConversionFlags {
+ Minimize = 1, /* Minimize # of digits */
+ AlwaysSign = 2, /* emit leading '+' if not negative */
+};
+
+/*
+ * When allocating decimal conversion output buffers, use the maximum
+ * number of significant decimal digits in the representation of the
+ * least nonzero value, and add this extra space for a sign, a NUL, and
+ * some extra due to the library working internally in base 10**16
+ * and computing its output size in multiples of 16.
+ */
+#define EXTRA_DECIMAL_CONVERSION_SPACE (1 + 1 + 2 * 16 - 1)
+
+#ifdef __cplusplus
+
+RT_OFFLOAD_API_GROUP_BEGIN
+
+template <int PREC>
+RT_API_ATTRS ConversionToDecimalResult ConvertToDecimal(char *, size_t,
+ DecimalConversionFlags, int digits, enum FortranRounding rounding,
+ BinaryFloatingPointNumber<PREC> x);
+
+extern template RT_API_ATTRS ConversionToDecimalResult ConvertToDecimal<8>(
+ char *, size_t, enum DecimalConversionFlags, int, enum FortranRounding,
+ BinaryFloatingPointNumber<8>);
+extern template RT_API_ATTRS ConversionToDecimalResult ConvertToDecimal<11>(
+ char *, size_t, enum DecimalConversionFlags, int, enum FortranRounding,
+ BinaryFloatingPointNumber<11>);
+extern template RT_API_ATTRS ConversionToDecimalResult ConvertToDecimal<24>(
+ char *, size_t, enum DecimalConversionFlags, int, enum FortranRounding,
+ BinaryFloatingPointNumber<24>);
+extern template RT_API_ATTRS ConversionToDecimalResult ConvertToDecimal<53>(
+ char *, size_t, enum DecimalConversionFlags, int, enum FortranRounding,
+ BinaryFloatingPointNumber<53>);
+extern template RT_API_ATTRS ConversionToDecimalResult ConvertToDecimal<64>(
+ char *, size_t, enum DecimalConversionFlags, int, enum FortranRounding,
+ BinaryFloatingPointNumber<64>);
+extern template RT_API_ATTRS ConversionToDecimalResult ConvertToDecimal<113>(
+ char *, size_t, enum DecimalConversionFlags, int, enum FortranRounding,
+ BinaryFloatingPointNumber<113>);
+
+template <int PREC> struct ConversionToBinaryResult {
+ BinaryFloatingPointNumber<PREC> binary;
+ enum ConversionResultFlags flags { Exact };
+};
+
+template <int PREC>
+RT_API_ATTRS ConversionToBinaryResult<PREC> ConvertToBinary(const char *&,
+ enum FortranRounding = RoundNearest, const char *end = nullptr);
+
+extern template RT_API_ATTRS ConversionToBinaryResult<8> ConvertToBinary<8>(
+ const char *&, enum FortranRounding, const char *end);
+extern template RT_API_ATTRS ConversionToBinaryResult<11> ConvertToBinary<11>(
+ const char *&, enum FortranRounding, const char *end);
+extern template RT_API_ATTRS ConversionToBinaryResult<24> ConvertToBinary<24>(
+ const char *&, enum FortranRounding, const char *end);
+extern template RT_API_ATTRS ConversionToBinaryResult<53> ConvertToBinary<53>(
+ const char *&, enum FortranRounding, const char *end);
+extern template RT_API_ATTRS ConversionToBinaryResult<64> ConvertToBinary<64>(
+ const char *&, enum FortranRounding, const char *end);
+extern template RT_API_ATTRS ConversionToBinaryResult<113> ConvertToBinary<113>(
+ const char *&, enum FortranRounding, const char *end);
+
+RT_OFFLOAD_API_GROUP_END
+
+} // namespace Fortran::decimal
+extern "C" {
+#define NS(x) Fortran::decimal::x
+#else /* C++ */
+#define NS(x) x
+#endif /* C++ */
+
+RT_API_ATTRS struct NS(ConversionToDecimalResult)
+ ConvertFloatToDecimal(char *, size_t, enum NS(DecimalConversionFlags),
+ int digits, enum NS(FortranRounding), float);
+RT_API_ATTRS struct NS(ConversionToDecimalResult)
+ ConvertDoubleToDecimal(char *, size_t, enum NS(DecimalConversionFlags),
+ int digits, enum NS(FortranRounding), double);
+RT_API_ATTRS struct NS(ConversionToDecimalResult)
+ ConvertLongDoubleToDecimal(char *, size_t, enum NS(DecimalConversionFlags),
+ int digits, enum NS(FortranRounding), long double);
+
+RT_API_ATTRS enum NS(ConversionResultFlags)
+ ConvertDecimalToFloat(const char **, float *, enum NS(FortranRounding));
+RT_API_ATTRS enum NS(ConversionResultFlags)
+ ConvertDecimalToDouble(const char **, double *, enum NS(FortranRounding));
+RT_API_ATTRS enum NS(ConversionResultFlags) ConvertDecimalToLongDouble(
+ const char **, long double *, enum NS(FortranRounding));
+#undef NS
+#ifdef __cplusplus
+} // extern "C"
+#endif
+#endif
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/ISO_Fortran_binding.h b/contrib/libs/llvm/flang-rt/flang/include/flang/ISO_Fortran_binding.h
new file mode 100644
index 00000000000..f5b8d0d2ea6
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/ISO_Fortran_binding.h
@@ -0,0 +1,215 @@
+/*===-- include/flang/ISO_Fortran_binding.h -----------------------*- C++ -*-===
+ *
+ * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+ * See https://llvm.org/LICENSE.txt for license information.
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ *
+ * ===-----------------------------------------------------------------------===
+ */
+
+#ifndef CFI_ISO_FORTRAN_BINDING_H_
+#define CFI_ISO_FORTRAN_BINDING_H_
+
+/* When this header is included into the compiler and runtime implementations,
+ * it does so by means of a wrapper header that establishes namespaces and
+ * a macro for extra function attributes (RT_API_ATTRS).
+ */
+#ifndef FORTRAN_COMMON_ISO_FORTRAN_BINDING_WRAPPER_H_
+#include <stddef.h>
+#define FORTRAN_ISO_NAMESPACE_
+#endif
+
+/* Standard interface to Fortran from C and C++.
+ * These interfaces are named in subclause 18.5 of the Fortran 2018
+ * standard, with most of the actual details being left to the
+ * implementation.
+ */
+
+#ifndef RT_API_ATTRS
+#define RT_API_ATTRS
+#endif
+
+/* 18.5.4 */
+#define CFI_VERSION 20240719
+
+#if !defined CFI_MAX_RANK || !defined __OVERRIDE_CFI_MAX_RANK
+#define CFI_MAX_RANK 15
+#endif
+typedef unsigned char CFI_rank_t;
+
+/* This type is probably larger than a default Fortran INTEGER
+ * and should be used for all array indexing and loop bound calculations.
+ */
+typedef ptrdiff_t CFI_index_t;
+
+typedef unsigned char CFI_attribute_t;
+#define CFI_attribute_pointer 1
+#define CFI_attribute_allocatable 2
+#define CFI_attribute_other 0 /* neither pointer nor allocatable */
+
+typedef signed char CFI_type_t;
+/* These codes are required to be macros (i.e., #ifdef will work).
+ * They are not required to be distinct, but neither are they required
+ * to have had their synonyms combined.
+ */
+#define CFI_type_signed_char 1
+#define CFI_type_short 2
+#define CFI_type_int 3
+#define CFI_type_long 4
+#define CFI_type_long_long 5
+#define CFI_type_size_t 6
+#define CFI_type_int8_t 7
+#define CFI_type_int16_t 8
+#define CFI_type_int32_t 9
+#define CFI_type_int64_t 10
+#define CFI_type_int128_t 11 /* extension kind=16 */
+#define CFI_type_int_least8_t 12
+#define CFI_type_int_least16_t 13
+#define CFI_type_int_least32_t 14
+#define CFI_type_int_least64_t 15
+#define CFI_type_int_least128_t 16 /* extension */
+#define CFI_type_int_fast8_t 17
+#define CFI_type_int_fast16_t 18
+#define CFI_type_int_fast32_t 19
+#define CFI_type_int_fast64_t 20
+#define CFI_type_int_fast128_t 21 /* extension */
+#define CFI_type_intmax_t 22
+#define CFI_type_intptr_t 23
+#define CFI_type_ptrdiff_t 24
+#define CFI_type_half_float 25 /* extension: kind=2 */
+#define CFI_type_bfloat 26 /* extension: kind=3 */
+#define CFI_type_float 27
+#define CFI_type_double 28
+#define CFI_type_extended_double 29 /* extension: kind=10 */
+#define CFI_type_long_double 30
+#define CFI_type_float128 31 /* extension: kind=16 */
+#define CFI_type_half_float_Complex 32 /* extension: kind=2 */
+#define CFI_type_bfloat_Complex 33 /* extension: kind=3 */
+#define CFI_type_float_Complex 34
+#define CFI_type_double_Complex 35
+#define CFI_type_extended_double_Complex 36 /* extension: kind=10 */
+#define CFI_type_long_double_Complex 37
+#define CFI_type_float128_Complex 38 /* extension: kind=16 */
+#define CFI_type_Bool 39
+#define CFI_type_char 40
+#define CFI_type_cptr 41
+#define CFI_type_struct 42
+#define CFI_type_char16_t 43 /* extension kind=2 */
+#define CFI_type_char32_t 44 /* extension kind=4 */
+#define CFI_type_uint8_t 45 /* extension: unsigned */
+#define CFI_type_uint16_t 46
+#define CFI_type_uint32_t 47
+#define CFI_type_uint64_t 48
+#define CFI_type_uint128_t 49
+#define CFI_TYPE_LAST CFI_type_uint128_t
+#define CFI_type_other (-1) // must be negative
+
+/* Error code macros - skip some of the small values to avoid conflicts with
+ * other status codes mandated by the standard, e.g. those returned by
+ * GET_ENVIRONMENT_VARIABLE (16.9.84) */
+#define CFI_SUCCESS 0 /* must be zero */
+#define CFI_ERROR_BASE_ADDR_NULL 11
+#define CFI_ERROR_BASE_ADDR_NOT_NULL 12
+#define CFI_INVALID_ELEM_LEN 13
+#define CFI_INVALID_RANK 14
+#define CFI_INVALID_TYPE 15
+#define CFI_INVALID_ATTRIBUTE 16
+#define CFI_INVALID_EXTENT 17
+#define CFI_INVALID_DESCRIPTOR 18
+#define CFI_ERROR_MEM_ALLOCATION 19
+#define CFI_ERROR_OUT_OF_BOUNDS 20
+
+/* 18.5.2 per-dimension information */
+typedef struct CFI_dim_t {
+ CFI_index_t lower_bound;
+ CFI_index_t extent; /* == -1 for assumed size */
+ CFI_index_t sm; /* memory stride in bytes */
+} CFI_dim_t;
+
+#ifdef __cplusplus
+namespace cfi_internal {
+// C++ does not support flexible array.
+// The below structure emulates a flexible array. This structure does not take
+// care of getting the memory storage. Note that it already contains one element
+// because a struct cannot be empty.
+extern "C++" template <typename T> struct FlexibleArray : T {
+ RT_API_ATTRS T &operator[](int index) { return *(this + index); }
+ RT_API_ATTRS const T &operator[](int index) const { return *(this + index); }
+ RT_API_ATTRS operator T *() { return this; }
+ RT_API_ATTRS operator const T *() const { return this; }
+};
+} // namespace cfi_internal
+#endif
+
+/* 18.5.3 generic data descriptor */
+
+/* Descriptor header members */
+#define _CFI_CDESC_T_HEADER_MEMBERS \
+ /* These three members must appear first, \
+ * in exactly this order. */ \
+ void *base_addr; \
+ size_t elem_len; /* element size in bytes */ \
+ int version; /* == CFI_VERSION */ \
+ CFI_rank_t rank; /* [0 .. CFI_MAX_RANK] */ \
+ CFI_type_t type; \
+ CFI_attribute_t attribute; \
+ /* This encodes both the presence of the f18Addendum and the index of the \
+ * allocator used to managed memory of the data hold by the descriptor. */ \
+ unsigned char extra;
+
+typedef struct CFI_cdesc_t {
+ _CFI_CDESC_T_HEADER_MEMBERS
+#ifdef __cplusplus
+ cfi_internal::FlexibleArray<CFI_dim_t> dim;
+#else
+ CFI_dim_t dim[]; /* must appear last */
+#endif
+} CFI_cdesc_t;
+
+/* 18.5.4 */
+#ifdef __cplusplus
+// This struct acquires the additional storage, if any is
+// needed, for C++'s CFI_cdesc_t's emulated flexible
+// dim[] array.
+namespace cfi_internal {
+extern "C++" template <int r> struct CdescStorage : public CFI_cdesc_t {
+ static_assert((r > 1 && r <= CFI_MAX_RANK), "CFI_INVALID_RANK");
+ CFI_dim_t dim[r - 1];
+};
+extern "C++" template <> struct CdescStorage<1> : public CFI_cdesc_t {};
+extern "C++" template <> struct CdescStorage<0> : public CFI_cdesc_t {};
+} // namespace cfi_internal
+#define CFI_CDESC_T(rank) \
+ FORTRAN_ISO_NAMESPACE_::cfi_internal::CdescStorage<rank>
+#else
+#define CFI_CDESC_T(_RANK) \
+ struct { \
+ _CFI_CDESC_T_HEADER_MEMBERS \
+ CFI_dim_t dim[_RANK]; \
+ }
+#endif
+
+/* 18.5.5 procedural interfaces*/
+#ifdef __cplusplus
+extern "C" {
+#endif
+RT_API_ATTRS void *CFI_address(
+ const CFI_cdesc_t *, const CFI_index_t subscripts[]);
+RT_API_ATTRS int CFI_allocate(CFI_cdesc_t *, const CFI_index_t lower_bounds[],
+ const CFI_index_t upper_bounds[], size_t elem_len);
+RT_API_ATTRS int CFI_deallocate(CFI_cdesc_t *);
+RT_API_ATTRS int CFI_establish(CFI_cdesc_t *, void *base_addr, CFI_attribute_t,
+ CFI_type_t, size_t elem_len, CFI_rank_t, const CFI_index_t extents[]);
+RT_API_ATTRS int CFI_is_contiguous(const CFI_cdesc_t *);
+RT_API_ATTRS int CFI_section(CFI_cdesc_t *, const CFI_cdesc_t *source,
+ const CFI_index_t lower_bounds[], const CFI_index_t upper_bounds[],
+ const CFI_index_t strides[]);
+RT_API_ATTRS int CFI_select_part(CFI_cdesc_t *, const CFI_cdesc_t *source,
+ size_t displacement, size_t elem_len);
+RT_API_ATTRS int CFI_setpointer(
+ CFI_cdesc_t *, const CFI_cdesc_t *source, const CFI_index_t lower_bounds[]);
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif /* CFI_ISO_FORTRAN_BINDING_H_ */
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/allocatable.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/allocatable.h
new file mode 100644
index 00000000000..863c07494e7
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/allocatable.h
@@ -0,0 +1,133 @@
+//===-- include/flang/Runtime/allocatable.h ---------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Defines APIs for Fortran runtime library support of code generated
+// to manipulate and query allocatable variables, dummy arguments, & components.
+#ifndef FORTRAN_RUNTIME_ALLOCATABLE_H_
+#define FORTRAN_RUNTIME_ALLOCATABLE_H_
+
+#include "flang/Runtime/descriptor-consts.h"
+#include "flang/Runtime/entry-names.h"
+
+namespace Fortran::runtime {
+
+extern "C" {
+
+// Initializes the descriptor for an allocatable of intrinsic or derived type.
+// The incoming descriptor is treated as (and can be) uninitialized garbage.
+// Must be called for each allocatable variable as its scope comes into being.
+// The storage for the allocatable's descriptor must have already been
+// allocated to a size sufficient for the rank, corank, and type.
+// A descriptor must be initialized before being used for any purpose,
+// but needs reinitialization in a deallocated state only when there is
+// a change of type, rank, or corank.
+void RTDECL(AllocatableInitIntrinsic)(
+ Descriptor &, TypeCategory, int kind, int rank = 0, int corank = 0);
+void RTDECL(AllocatableInitCharacter)(Descriptor &, SubscriptValue length = 0,
+ int kind = 1, int rank = 0, int corank = 0);
+void RTDECL(AllocatableInitDerived)(
+ Descriptor &, const typeInfo::DerivedType &, int rank = 0, int corank = 0);
+
+// Initializes the descriptor for an allocatable of intrinsic or derived type.
+// These functions are meant to be used in the allocate statement lowering. If
+// the descriptor is allocated, the initialization is skiped so the error
+// handling can be done by AllocatableAllocate.
+void RTDECL(AllocatableInitIntrinsicForAllocate)(
+ Descriptor &, TypeCategory, int kind, int rank = 0, int corank = 0);
+void RTDECL(AllocatableInitCharacterForAllocate)(Descriptor &,
+ SubscriptValue length = 0, int kind = 1, int rank = 0, int corank = 0);
+void RTDECL(AllocatableInitDerivedForAllocate)(
+ Descriptor &, const typeInfo::DerivedType &, int rank = 0, int corank = 0);
+
+// Checks that an allocatable is not already allocated in statements
+// with STAT=. Use this on a value descriptor before setting bounds or
+// type parameters. Not necessary on a freshly initialized descriptor.
+// (If there's no STAT=, the error will be caught later anyway, but
+// this API allows the error to be caught before descriptor is modified.)
+// Return 0 on success (deallocated state), else the STAT= value.
+int RTDECL(AllocatableCheckAllocated)(Descriptor &,
+ const Descriptor *errMsg = nullptr, const char *sourceFile = nullptr,
+ int sourceLine = 0);
+
+// For MOLD= allocation; sets bounds, cobounds, and length type
+// parameters from another descriptor. The destination descriptor must
+// be initialized and deallocated.
+void RTDECL(AllocatableApplyMold)(
+ Descriptor &, const Descriptor &mold, int rank = 0);
+
+// Explicitly sets the bounds and length type parameters of an initialized
+// deallocated allocatable.
+void RTDECL(AllocatableSetBounds)(
+ Descriptor &, int zeroBasedDim, SubscriptValue lower, SubscriptValue upper);
+
+// The upper cobound is ignored for the last codimension.
+void RTDECL(AllocatableSetCoBounds)(Descriptor &, int zeroBasedCoDim,
+ SubscriptValue lower, SubscriptValue upper = 0);
+
+// Length type parameters are indexed in declaration order; i.e., 0 is the
+// first length type parameter in the deepest base type. (Not for use
+// with CHARACTER; see above.)
+void RTDECL(AllocatableSetDerivedLength)(
+ Descriptor &, int which, SubscriptValue);
+
+// When an explicit type-spec appears in an ALLOCATE statement for an
+// allocatable with an explicit (non-deferred) length type paramater for
+// a derived type or CHARACTER value, the explicit value has to match
+// the length type parameter's value. This API checks that requirement.
+// Returns 0 for success, or the STAT= value on failure with hasStat==true.
+int RTDECL(AllocatableCheckLengthParameter)(Descriptor &,
+ int which /* 0 for CHARACTER length */, SubscriptValue other,
+ bool hasStat = false, const Descriptor *errMsg = nullptr,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+
+// Allocates an allocatable. The allocatable descriptor must have been
+// initialized and its bounds and length type parameters set and must be
+// in a deallocated state.
+// On failure, if hasStat is true, returns a nonzero error code for
+// STAT= and (if present) fills in errMsg; if hasStat is false, the
+// image is terminated. On success, leaves errMsg alone and returns zero.
+// Successfully allocated memory is initialized if the allocatable has a
+// derived type, and is always initialized by AllocatableAllocateSource().
+// Performs all necessary coarray synchronization and validation actions.
+int RTDECL(AllocatableAllocate)(Descriptor &,
+ std::int64_t *asyncObject = nullptr, bool hasStat = false,
+ const Descriptor *errMsg = nullptr, const char *sourceFile = nullptr,
+ int sourceLine = 0);
+int RTDECL(AllocatableAllocateSource)(Descriptor &, const Descriptor &source,
+ bool hasStat = false, const Descriptor *errMsg = nullptr,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+
+// Implements the intrinsic subroutine MOVE_ALLOC (16.9.137 in F'2018,
+// but note the order of first two arguments is reversed for consistency
+// with the other APIs for allocatables.) The destination descriptor
+// must be initialized.
+std::int32_t RTDECL(MoveAlloc)(Descriptor &to, Descriptor &from,
+ const typeInfo::DerivedType *, bool hasStat = false,
+ const Descriptor *errMsg = nullptr, const char *sourceFile = nullptr,
+ int sourceLine = 0);
+
+// Deallocates an allocatable. Finalizes elements &/or components as needed.
+// The allocatable is left in an initialized state suitable for reallocation
+// with the same bounds, cobounds, and length type parameters.
+int RTDECL(AllocatableDeallocate)(Descriptor &, bool hasStat = false,
+ const Descriptor *errMsg = nullptr, const char *sourceFile = nullptr,
+ int sourceLine = 0);
+
+// Same as AllocatableDeallocate but also set the dynamic type as the declared
+// type as mentioned in 7.3.2.3 note 7.
+int RTDECL(AllocatableDeallocatePolymorphic)(Descriptor &,
+ const typeInfo::DerivedType *, bool hasStat = false,
+ const Descriptor *errMsg = nullptr, const char *sourceFile = nullptr,
+ int sourceLine = 0);
+
+// Variant of above that does not finalize; for intermediate results
+void RTDECL(AllocatableDeallocateNoFinal)(
+ Descriptor &, const char *sourceFile = nullptr, int sourceLine = 0);
+} // extern "C"
+} // namespace Fortran::runtime
+#endif // FORTRAN_RUNTIME_ALLOCATABLE_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/allocator-registry-consts.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/allocator-registry-consts.h
new file mode 100644
index 00000000000..70735c2fc7a
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/allocator-registry-consts.h
@@ -0,0 +1,20 @@
+//===-- include/flang/Runtime/allocator-registry-consts.h -------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_RUNTIME_ALLOCATOR_REGISTRY_CONSTS_H_
+#define FORTRAN_RUNTIME_ALLOCATOR_REGISTRY_CONSTS_H_
+
+static constexpr unsigned kDefaultAllocator = 0;
+
+// Allocator used for CUF
+static constexpr unsigned kPinnedAllocatorPos = 1;
+static constexpr unsigned kDeviceAllocatorPos = 2;
+static constexpr unsigned kManagedAllocatorPos = 3;
+static constexpr unsigned kUnifiedAllocatorPos = 4;
+
+#endif /* FORTRAN_RUNTIME_ALLOCATOR_REGISTRY_CONSTS_H_ */
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/array-constructor-consts.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/array-constructor-consts.h
new file mode 100644
index 00000000000..ad3583eef29
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/array-constructor-consts.h
@@ -0,0 +1,97 @@
+//===-- include/flang/Runtime/array-constructor-consts.h --------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_RUNTIME_ARRAY_CONSTRUCTOR_CONSTS_H_
+#define FORTRAN_RUNTIME_ARRAY_CONSTRUCTOR_CONSTS_H_
+
+#include "flang/Runtime/descriptor-consts.h"
+#include "flang/Runtime/entry-names.h"
+#include <cstdint>
+
+namespace Fortran::runtime {
+struct ArrayConstructorVector;
+
+// Max sizeof(ArrayConstructorVector) and sizeof(ArrayConstructorVector) for any
+// target.
+// TODO: Use target-specific size/alignment instead of overapproximation.
+constexpr std::size_t MaxArrayConstructorVectorSizeInBytes = 2 * 40;
+constexpr std::size_t MaxArrayConstructorVectorAlignInBytes = 8;
+
+// This file defines an API to "push" an evaluated array constructor value
+// "from" into some storage "to" of an array constructor. It can be seen as a
+// form of std::vector::push_back() implementation for Fortran array
+// constructors. In the APIs and ArrayConstructorVector struct above:
+//
+// - "to" is a ranked-1 descriptor whose declared type is already set to the
+// array constructor derived type. It may be already allocated, even before the
+// first call to this API, or it may be unallocated. "to" extent is increased
+// every time a "from" is pushed past its current extent. At this end of the
+// API calls, its extent is the extent of the array constructor. If "to" is
+// unallocated and its extent is not null, it is assumed this is the final array
+// constructor extent value, and the first allocation already "reserves" storage
+// space accordingly to avoid reallocations.
+// - "from" is a scalar or array descriptor for the evaluated array
+// constructor value that must be copied into the storage of "to" at
+// "nextValuePosition".
+// - "useValueLengthParameters" must be set to true if the array constructor
+// has length parameters and no type spec. If it is true and "to" is
+// unallocated, "to" will take the length parameters of "from". If it is true
+// and "to" is an allocated character array constructor, it will be checked
+// that "from" length matches the one from "to". When it is false, the
+// character length must already be set in "to" before the first call to this
+// API and "from" character lengths are allowed to mismatch from "to".
+// - "nextValuePosition" is the zero based sequence position of "from" in the
+// array constructor. It is updated after this call by the number of "from"
+// elements. It should be set to zero by the caller of this API before the first
+// call.
+// - "actualAllocationSize" is the current allocation size of "to" storage. It
+// may be bigger than "to" extent for reallocation optimization purposes, but
+// should never be smaller, unless this is the first call and "to" is
+// unallocated. It is updated by the runtime after each successful allocation or
+// reallocation. It should be set to "to" extent if "to" is allocated before the
+// first call of this API, and can be left undefined otherwise.
+//
+// Note that this API can be used with "to" being a variable (that can be
+// discontiguous). This can be done when the variable is the left hand side of
+// an assignment from an array constructor as long as:
+// - none of the ac-value overlaps with the variable,
+// - this is an intrinsic assignment that is not a whole allocatable
+// assignment, *and* for a type that has no components requiring user defined
+// assignments,
+// - the variable is properly finalized before using this API if its need to,
+// - "useValueLengthParameters" should be set to false in this case, even if
+// the array constructor has no type-spec, since the variable may have a
+// different character length than the array constructor values.
+
+extern "C" {
+// API to initialize an ArrayConstructorVector before any values are pushed to
+// it. Inlined code is only expected to allocate the "ArrayConstructorVector"
+// class instance storage with sufficient size
+// (MaxArrayConstructorVectorSizeInBytes is expected to be large enough for all
+// supported targets). This avoids the need for the runtime to maintain a state,
+// or to use dynamic allocation for it.
+void RTDECL(InitArrayConstructorVector)(ArrayConstructorVector &vector,
+ Descriptor &to, bool useValueLengthParameters,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+
+// Generic API to push any kind of entity into the array constructor (any
+// Fortran type and any rank).
+void RTDECL(PushArrayConstructorValue)(
+ ArrayConstructorVector &vector, const Descriptor &from);
+
+// API to push scalar array constructor value of:
+// - a numerical or logical type,
+// - or a derived type that has no length parameters, and no allocatable
+// component (that would require deep copies).
+// It requires no descriptor for the value that is passed via its base address.
+void RTDECL(PushArrayConstructorSimpleScalar)(
+ ArrayConstructorVector &vector, void *from);
+} // extern "C"
+} // namespace Fortran::runtime
+
+#endif /* FORTRAN_RUNTIME_ARRAY_CONSTRUCTOR_CONSTS_H_ */
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/assign.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/assign.h
new file mode 100644
index 00000000000..7d198bdcc9e
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/assign.h
@@ -0,0 +1,85 @@
+//===-- include/flang/Runtime/assign.h --------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// External APIs for data assignment (both intrinsic assignment and TBP defined
+// generic ASSIGNMENT(=)). Should be called by lowering for any assignments
+// possibly needing special handling. Intrinsic assignment to non-allocatable
+// variables whose types are intrinsic need not come through here (though they
+// may do so). Assignments to allocatables, and assignments whose types may be
+// polymorphic or are monomorphic and of derived types with finalization,
+// allocatable components, or components with type-bound defined assignments, in
+// the original type or the types of its non-pointer components (recursively)
+// must arrive here.
+//
+// Non-type-bound generic INTERFACE ASSIGNMENT(=) is resolved in semantics and
+// need not be handled here in the runtime apart from derived type components;
+// ditto for type conversions on intrinsic assignments.
+
+#ifndef FORTRAN_RUNTIME_ASSIGN_H_
+#define FORTRAN_RUNTIME_ASSIGN_H_
+
+#include "flang/Runtime/entry-names.h"
+#include "flang/Runtime/freestanding-tools.h"
+
+namespace Fortran::runtime {
+class Descriptor;
+class Terminator;
+
+enum AssignFlags {
+ NoAssignFlags = 0,
+ MaybeReallocate = 1 << 0,
+ NeedFinalization = 1 << 1,
+ CanBeDefinedAssignment = 1 << 2,
+ ComponentCanBeDefinedAssignment = 1 << 3,
+ ExplicitLengthCharacterLHS = 1 << 4,
+ PolymorphicLHS = 1 << 5,
+ DeallocateLHS = 1 << 6,
+ UpdateLHSBounds = 1 << 7,
+};
+
+#ifdef RT_DEVICE_COMPILATION
+RT_API_ATTRS void Assign(Descriptor &to, const Descriptor &from,
+ Terminator &terminator, int flags, MemmoveFct memmoveFct = &MemmoveWrapper);
+#else
+RT_API_ATTRS void Assign(Descriptor &to, const Descriptor &from,
+ Terminator &terminator, int flags,
+ MemmoveFct memmoveFct = &Fortran::runtime::memmove);
+#endif
+
+extern "C" {
+
+// API for lowering assignment
+void RTDECL(Assign)(Descriptor &to, const Descriptor &from,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+// This variant has no finalization, defined assignment, or allocatable
+// reallocation.
+void RTDECL(AssignTemporary)(Descriptor &to, const Descriptor &from,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+
+// Establish "temp" descriptor as an allocatable descriptor with the same type,
+// rank, and length parameters as "var" and copy "var" to it using
+// AssignTemporary.
+void RTDECL(CopyInAssign)(Descriptor &temp, const Descriptor &var,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+// When "var" is provided, copy "temp" to it assuming "var" is already
+// initialized. Destroy and deallocate "temp" in all cases.
+void RTDECL(CopyOutAssign)(Descriptor *var, Descriptor &temp,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+// This variant is for assignments to explicit-length CHARACTER left-hand
+// sides that might need to handle truncation or blank-fill, and
+// must maintain the character length even if an allocatable array
+// is reallocated.
+void RTDECL(AssignExplicitLengthCharacter)(Descriptor &to,
+ const Descriptor &from, const char *sourceFile = nullptr,
+ int sourceLine = 0);
+// This variant is assignments to whole polymorphic allocatables.
+void RTDECL(AssignPolymorphic)(Descriptor &to, const Descriptor &from,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+} // extern "C"
+} // namespace Fortran::runtime
+#endif // FORTRAN_RUNTIME_ASSIGN_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/c-or-cpp.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/c-or-cpp.h
new file mode 100644
index 00000000000..8bac5239077
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/c-or-cpp.h
@@ -0,0 +1,31 @@
+//===-- include/flang/Runtime/c-or-cpp.h ------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_RUNTIME_C_OR_CPP_H_
+#define FORTRAN_RUNTIME_C_OR_CPP_H_
+
+#ifdef __cplusplus
+#define IF_CPLUSPLUS(x) x
+#define IF_NOT_CPLUSPLUS(x)
+#define DEFAULT_VALUE(x) = (x)
+#define RESTRICT __restrict
+#else
+#include <stdbool.h>
+#define IF_CPLUSPLUS(x)
+#define IF_NOT_CPLUSPLUS(x) x
+#define DEFAULT_VALUE(x)
+#define RESTRICT restrict
+#endif
+
+#define FORTRAN_EXTERN_C_BEGIN IF_CPLUSPLUS(extern "C" {)
+#define FORTRAN_EXTERN_C_END IF_CPLUSPLUS( \
+ })
+#define NORETURN IF_CPLUSPLUS([[noreturn]])
+#define NO_ARGUMENTS IF_NOT_CPLUSPLUS(void)
+
+#endif // FORTRAN_RUNTIME_C_OR_CPP_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/character.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/character.h
new file mode 100644
index 00000000000..dd47686fe85
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/character.h
@@ -0,0 +1,132 @@
+//===-- include/flang/Runtime/character.h -----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Defines API between compiled code and the CHARACTER
+// support functions in the runtime library.
+
+#ifndef FORTRAN_RUNTIME_CHARACTER_H_
+#define FORTRAN_RUNTIME_CHARACTER_H_
+#include "flang/Runtime/entry-names.h"
+#include <cstddef>
+#include <cstdint>
+
+namespace Fortran::runtime {
+
+class Descriptor;
+
+template <typename CHAR>
+RT_API_ATTRS int CharacterScalarCompare(
+ const CHAR *x, const CHAR *y, std::size_t xChars, std::size_t yChars);
+extern template RT_API_ATTRS int CharacterScalarCompare<char>(
+ const char *x, const char *y, std::size_t xChars, std::size_t yChars);
+extern template RT_API_ATTRS int CharacterScalarCompare<char16_t>(
+ const char16_t *x, const char16_t *y, std::size_t xChars,
+ std::size_t yChars);
+extern template RT_API_ATTRS int CharacterScalarCompare<char32_t>(
+ const char32_t *x, const char32_t *y, std::size_t xChars,
+ std::size_t yChars);
+
+extern "C" {
+
+// Appends the corresponding (or expanded) characters of 'operand'
+// to the (elements of) a (re)allocation of 'accumulator', which must be an
+// initialized CHARACTER allocatable scalar or array descriptor -- use
+// AllocatableInitCharacter() to set one up. Crashes when not
+// conforming. Assumes independence of data.
+void RTDECL(CharacterConcatenate)(Descriptor &accumulator,
+ const Descriptor &from, const char *sourceFile = nullptr,
+ int sourceLine = 0);
+
+// Convenience specialization for ASCII scalars concatenation.
+void RTDECL(CharacterConcatenateScalar1)(
+ Descriptor &accumulator, const char *from, std::size_t chars);
+
+// CHARACTER comparisons. The kinds must match. Like std::memcmp(),
+// the result is less than zero, zero, or greater than zero if the first
+// argument is less than the second, equal to the second, or greater than
+// the second, respectively. The shorter argument is treated as if it were
+// padded on the right with blanks.
+// N.B.: Calls to the restricted specific intrinsic functions LGE, LGT, LLE,
+// & LLT are converted into calls to these during lowering; they don't have
+// to be able to be passed as actual procedure arguments.
+int RTDECL(CharacterCompareScalar)(const Descriptor &, const Descriptor &);
+int RTDECL(CharacterCompareScalar1)(
+ const char *x, const char *y, std::size_t xChars, std::size_t yChars);
+int RTDECL(CharacterCompareScalar2)(const char16_t *x, const char16_t *y,
+ std::size_t xChars, std::size_t yChars);
+int RTDECL(CharacterCompareScalar4)(const char32_t *x, const char32_t *y,
+ std::size_t xChars, std::size_t yChars);
+
+// General CHARACTER comparison; the result is a LOGICAL(KIND=1) array that
+// is established and populated.
+void RTDECL(CharacterCompare)(
+ Descriptor &result, const Descriptor &, const Descriptor &);
+
+// Special-case support for optimized ASCII scalar expressions.
+
+// Copies data from 'rhs' to the remaining space (lhsLength - offset)
+// in 'lhs', if any. Returns the new offset. Assumes independence.
+std::size_t RTDECL(CharacterAppend1)(char *lhs, std::size_t lhsBytes,
+ std::size_t offset, const char *rhs, std::size_t rhsBytes);
+
+// Appends any necessary spaces to a CHARACTER(KIND=1) scalar.
+void RTDECL(CharacterPad1)(char *lhs, std::size_t bytes, std::size_t offset);
+
+// Intrinsic functions
+// The result descriptors below are all established by the runtime.
+void RTDECL(Adjustl)(Descriptor &result, const Descriptor &,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+void RTDECL(Adjustr)(Descriptor &result, const Descriptor &,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+std::size_t RTDECL(LenTrim1)(const char *, std::size_t);
+std::size_t RTDECL(LenTrim2)(const char16_t *, std::size_t);
+std::size_t RTDECL(LenTrim4)(const char32_t *, std::size_t);
+void RTDECL(LenTrim)(Descriptor &result, const Descriptor &, int kind,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+void RTDECL(Repeat)(Descriptor &result, const Descriptor &string,
+ std::int64_t ncopies, const char *sourceFile = nullptr, int sourceLine = 0);
+void RTDECL(Trim)(Descriptor &result, const Descriptor &string,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+
+void RTDECL(CharacterMax)(Descriptor &accumulator, const Descriptor &x,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+void RTDECL(CharacterMin)(Descriptor &accumulator, const Descriptor &x,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+
+std::size_t RTDECL(Index1)(const char *, std::size_t, const char *substring,
+ std::size_t, bool back = false);
+std::size_t RTDECL(Index2)(const char16_t *, std::size_t,
+ const char16_t *substring, std::size_t, bool back = false);
+std::size_t RTDECL(Index4)(const char32_t *, std::size_t,
+ const char32_t *substring, std::size_t, bool back = false);
+void RTDECL(Index)(Descriptor &result, const Descriptor &string,
+ const Descriptor &substring, const Descriptor *back /*can be null*/,
+ int kind, const char *sourceFile = nullptr, int sourceLine = 0);
+
+std::size_t RTDECL(Scan1)(
+ const char *, std::size_t, const char *set, std::size_t, bool back = false);
+std::size_t RTDECL(Scan2)(const char16_t *, std::size_t, const char16_t *set,
+ std::size_t, bool back = false);
+std::size_t RTDECL(Scan4)(const char32_t *, std::size_t, const char32_t *set,
+ std::size_t, bool back = false);
+void RTDECL(Scan)(Descriptor &result, const Descriptor &string,
+ const Descriptor &set, const Descriptor *back /*can be null*/, int kind,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+
+std::size_t RTDECL(Verify1)(
+ const char *, std::size_t, const char *set, std::size_t, bool back = false);
+std::size_t RTDECL(Verify2)(const char16_t *, std::size_t, const char16_t *set,
+ std::size_t, bool back = false);
+std::size_t RTDECL(Verify4)(const char32_t *, std::size_t, const char32_t *set,
+ std::size_t, bool back = false);
+void RTDECL(Verify)(Descriptor &result, const Descriptor &string,
+ const Descriptor &set, const Descriptor *back /*can be null*/, int kind,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+}
+} // namespace Fortran::runtime
+#endif // FORTRAN_RUNTIME_CHARACTER_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/command.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/command.h
new file mode 100644
index 00000000000..19b486094da
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/command.h
@@ -0,0 +1,78 @@
+//===-- include/flang/Runtime/command.h -------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_RUNTIME_COMMAND_H_
+#define FORTRAN_RUNTIME_COMMAND_H_
+
+#include "flang/Runtime/entry-names.h"
+#include <cstdint>
+
+#ifdef _MSC_VER
+// On Windows* OS GetCurrentProcessId returns DWORD aka uint32_t
+typedef std::uint32_t pid_t;
+#else
+#include "sys/types.h" //pid_t
+#endif
+
+namespace Fortran::runtime {
+class Descriptor;
+
+extern "C" {
+// 16.9.51 COMMAND_ARGUMENT_COUNT
+//
+// Lowering may need to cast the result to match the precision of the default
+// integer kind.
+std::int32_t RTNAME(ArgumentCount)();
+
+// Calls getpid()
+pid_t RTNAME(GetPID)();
+
+// 16.9.82 GET_COMMAND
+// Try to get the value of the whole command. All of the parameters are
+// optional.
+// Return a STATUS as described in the standard.
+std::int32_t RTNAME(GetCommand)(const Descriptor *command = nullptr,
+ const Descriptor *length = nullptr, const Descriptor *errmsg = nullptr,
+ const char *sourceFile = nullptr, int line = 0);
+
+// 16.9.83 GET_COMMAND_ARGUMENT
+// Try to get the value of the n'th argument.
+// Returns a STATUS as described in the standard.
+std::int32_t RTNAME(GetCommandArgument)(std::int32_t n,
+ const Descriptor *argument = nullptr, const Descriptor *length = nullptr,
+ const Descriptor *errmsg = nullptr, const char *sourceFile = nullptr,
+ int line = 0);
+
+// 16.9.84 GET_ENVIRONMENT_VARIABLE
+// Try to get the value of the environment variable specified by NAME.
+// Returns a STATUS as described in the standard.
+std::int32_t RTNAME(GetEnvVariable)(const Descriptor &name,
+ const Descriptor *value = nullptr, const Descriptor *length = nullptr,
+ bool trim_name = true, const Descriptor *errmsg = nullptr,
+ const char *sourceFile = nullptr, int line = 0);
+
+// Calls getcwd()
+std::int32_t RTNAME(GetCwd)(
+ const Descriptor &cwd, const char *sourceFile, int line);
+
+// Calls hostnm()
+std::int32_t RTNAME(Hostnm)(
+ const Descriptor &res, const char *sourceFile, int line);
+
+std::int32_t RTNAME(PutEnv)(
+ const char *str, size_t str_length, const char *sourceFile, int line);
+
+// Calls unlink()
+std::int32_t RTNAME(Unlink)(
+ const char *path, size_t pathLength, const char *sourceFile, int line);
+
+} // extern "C"
+
+} // namespace Fortran::runtime
+
+#endif // FORTRAN_RUNTIME_COMMAND_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/complex.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/complex.h
new file mode 100644
index 00000000000..522e2380826
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/complex.h
@@ -0,0 +1,36 @@
+//===-- include/flang/Runtime/complex.h -------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// A single way to expose C++ complex class in files that can be used
+// in F18 runtime build. With inclusion of this file std::complex
+// and the related names become available, though, they may correspond
+// to alternative definitions (e.g. from cuda::std namespace).
+
+#ifndef FORTRAN_RUNTIME_COMPLEX_H
+#define FORTRAN_RUNTIME_COMPLEX_H
+
+#include "flang/Common/api-attrs.h"
+
+#if RT_USE_LIBCUDACXX
+#error #include <cuda/std/complex>
+#endif
+
+#if RT_USE_LIBCUDACXX && defined(RT_DEVICE_COMPILATION)
+namespace Fortran::runtime::rtcmplx {
+using cuda::std::complex;
+using cuda::std::conj;
+} // namespace Fortran::runtime::rtcmplx
+#else // !(RT_USE_LIBCUDACXX && defined(RT_DEVICE_COMPILATION))
+#include <complex>
+namespace Fortran::runtime::rtcmplx {
+using std::complex;
+using std::conj;
+} // namespace Fortran::runtime::rtcmplx
+#endif // !(RT_USE_LIBCUDACXX && defined(RT_DEVICE_COMPILATION))
+
+#endif // FORTRAN_RUNTIME_COMPLEX_H
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/cpp-type.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/cpp-type.h
new file mode 100644
index 00000000000..ec0c32579ec
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/cpp-type.h
@@ -0,0 +1,118 @@
+//===-- include/flang/Runtime/cpp-type.h ------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Maps Fortran intrinsic types to C++ types used in the runtime.
+
+#ifndef FORTRAN_RUNTIME_CPP_TYPE_H_
+#define FORTRAN_RUNTIME_CPP_TYPE_H_
+
+#include "flang/Common/Fortran-consts.h"
+#include "flang/Common/float128.h"
+#include "flang/Common/float80.h"
+#include "flang/Common/uint128.h"
+#include "flang/Runtime/complex.h"
+#include <cstdint>
+#if __cplusplus >= 202302
+#error #include <stdfloat>
+#endif
+#include <type_traits>
+
+#if !defined HAS_FP16 && __STDCPP_FLOAT16_T__
+#define HAS_FP16 1
+#endif
+#if !defined HAS_BF16 && __STDCPP_BFLOAT16_T__
+#define HAS_BF16 1
+#endif
+
+namespace Fortran::runtime {
+
+using common::TypeCategory;
+
+template <TypeCategory CAT, int KIND> struct CppTypeForHelper {
+ using type = void;
+};
+template <TypeCategory CAT, int KIND>
+using CppTypeFor = typename CppTypeForHelper<CAT, KIND>::type;
+
+template <TypeCategory CAT, int KIND>
+constexpr bool HasCppTypeFor{
+ !std::is_void_v<typename CppTypeForHelper<CAT, KIND>::type>};
+
+template <int KIND> struct CppTypeForHelper<TypeCategory::Integer, KIND> {
+ using type = common::HostSignedIntType<8 * KIND>;
+};
+
+template <int KIND> struct CppTypeForHelper<TypeCategory::Unsigned, KIND> {
+ using type = common::HostUnsignedIntType<8 * KIND>;
+};
+
+#if HAS_FP16
+template <> struct CppTypeForHelper<TypeCategory::Real, 2> {
+ using type = std::float16_t;
+};
+#endif
+#if HAS_BF16
+template <> struct CppTypeForHelper<TypeCategory::Real, 3> {
+ using type = std::bfloat16_t;
+};
+#endif
+template <> struct CppTypeForHelper<TypeCategory::Real, 4> {
+#if __STDCPP_FLOAT32_T__
+ using type = std::float32_t;
+#else
+ using type = float;
+#endif
+};
+template <> struct CppTypeForHelper<TypeCategory::Real, 8> {
+#if __STDCPP_FLOAT64_T__
+ using type = std::float64_t;
+#else
+ using type = double;
+#endif
+};
+#if HAS_FLOAT80
+template <> struct CppTypeForHelper<TypeCategory::Real, 10> {
+ using type = CppFloat80Type;
+};
+#endif
+#if __STDCPP_FLOAT128_T__
+using CppFloat128Type = std::float128_t;
+#elif HAS_LDBL128
+using CppFloat128Type = long double;
+#elif HAS_FLOAT128
+using CppFloat128Type = __float128;
+#endif
+#if __STDCPP_FLOAT128_t || HAS_LDBL128 || HAS_FLOAT128
+template <> struct CppTypeForHelper<TypeCategory::Real, 16> {
+ using type = CppFloat128Type;
+};
+#endif
+
+template <int KIND> struct CppTypeForHelper<TypeCategory::Complex, KIND> {
+ using type = rtcmplx::complex<CppTypeFor<TypeCategory::Real, KIND>>;
+};
+
+template <> struct CppTypeForHelper<TypeCategory::Character, 1> {
+ using type = char;
+};
+template <> struct CppTypeForHelper<TypeCategory::Character, 2> {
+ using type = char16_t;
+};
+template <> struct CppTypeForHelper<TypeCategory::Character, 4> {
+ using type = char32_t;
+};
+
+template <int KIND> struct CppTypeForHelper<TypeCategory::Logical, KIND> {
+ using type = common::HostSignedIntType<8 * KIND>;
+};
+template <> struct CppTypeForHelper<TypeCategory::Logical, 1> {
+ using type = bool;
+};
+
+} // namespace Fortran::runtime
+#endif // FORTRAN_RUNTIME_CPP_TYPE_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/derived-api.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/derived-api.h
new file mode 100644
index 00000000000..96374c5a3c2
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/derived-api.h
@@ -0,0 +1,73 @@
+//===-- include/flang/Runtime/derived-api.h ---------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// API for lowering to use for operations on derived type objects.
+// Initialiaztion and finalization are implied for pointer and allocatable
+// ALLOCATE()/DEALLOCATE() respectively, so these APIs should be used only for
+// local variables. Whole allocatable assignment should use AllocatableAssign()
+// instead of this Assign().
+
+#ifndef FORTRAN_RUNTIME_DERIVED_API_H_
+#define FORTRAN_RUNTIME_DERIVED_API_H_
+
+#include "flang/Runtime/entry-names.h"
+
+namespace Fortran::runtime {
+class Descriptor;
+
+namespace typeInfo {
+class DerivedType;
+}
+
+extern "C" {
+
+// Initializes and allocates an object's components, if it has a derived type
+// with any default component initialization or automatic components.
+// The descriptor must be initialized and non-null.
+void RTDECL(Initialize)(
+ const Descriptor &, const char *sourceFile = nullptr, int sourceLine = 0);
+
+// Initializes an object clone from the original object.
+// Each allocatable member of the clone is allocated with the same bounds as
+// in the original object, if it is also allocated in it.
+// The descriptor must be initialized and non-null.
+void RTDECL(InitializeClone)(const Descriptor &, const Descriptor &,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+
+// Finalizes an object and its components. Deallocates any
+// allocatable/automatic components. Does not deallocate the descriptor's
+// storage.
+void RTDECL(Destroy)(const Descriptor &);
+
+// Finalizes the object and its components.
+void RTDECL(Finalize)(
+ const Descriptor &, const char *sourceFile = nullptr, int sourceLine = 0);
+
+/// Deallocates any allocatable/automatic components.
+/// Does not deallocate the descriptor's storage.
+/// Does not perform any finalization.
+void RTDECL(DestroyWithoutFinalization)(const Descriptor &);
+
+// Intrinsic or defined assignment, with scalar expansion but not type
+// conversion.
+void RTDECL(Assign)(const Descriptor &, const Descriptor &,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+
+// Perform the test of the CLASS IS type guard statement of the SELECT TYPE
+// construct.
+bool RTDECL(ClassIs)(const Descriptor &, const typeInfo::DerivedType &);
+
+// Perform the test of the SAME_TYPE_AS intrinsic.
+bool RTDECL(SameTypeAs)(const Descriptor &, const Descriptor &);
+
+// Perform the test of the EXTENDS_TYPE_OF intrinsic.
+bool RTDECL(ExtendsTypeOf)(const Descriptor &, const Descriptor &);
+
+} // extern "C"
+} // namespace Fortran::runtime
+#endif // FORTRAN_RUNTIME_DERIVED_API_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/descriptor-consts.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/descriptor-consts.h
new file mode 100644
index 00000000000..acd7bc5ddbd
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/descriptor-consts.h
@@ -0,0 +1,76 @@
+//===-- include/flang/Runtime/descriptor-consts.h ---------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_RUNTIME_DESCRIPTOR_CONSTS_H_
+#define FORTRAN_RUNTIME_DESCRIPTOR_CONSTS_H_
+
+#include "flang/Common/Fortran-consts.h"
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
+#include "flang/Common/api-attrs.h"
+#include <cstddef>
+#include <cstdint>
+
+// Value of the addendum presence flag.
+#define _CFI_ADDENDUM_FLAG 1
+// Number of bits needed to be shifted when manipulating the allocator index.
+#define _CFI_ALLOCATOR_IDX_SHIFT 1
+// Allocator index mask.
+#define _CFI_ALLOCATOR_IDX_MASK 0b00001110
+
+namespace Fortran::runtime::typeInfo {
+using TypeParameterValue = std::int64_t;
+class DerivedType;
+} // namespace Fortran::runtime::typeInfo
+
+namespace Fortran::runtime {
+class Descriptor;
+using SubscriptValue = ISO::CFI_index_t;
+using common::TypeCategory;
+
+/// Returns size in bytes of the descriptor (not the data)
+/// This must be at least as large as the largest descriptor of any target
+/// triple.
+static constexpr RT_API_ATTRS std::size_t MaxDescriptorSizeInBytes(
+ int rank, bool addendum = false, int lengthTypeParameters = 0) {
+ // Layout:
+ //
+ // fortran::runtime::Descriptor {
+ // ISO::CFI_cdesc_t {
+ // void *base_addr; (pointer -> up to 8 bytes)
+ // size_t elem_len; (up to 8 bytes)
+ // int version; (up to 4 bytes)
+ // CFI_rank_t rank; (unsigned char -> 1 byte)
+ // CFI_type_t type; (signed char -> 1 byte)
+ // CFI_attribute_t attribute; (unsigned char -> 1 byte)
+ // unsigned char extra; (1 byte)
+ // }
+ // }
+ // fortran::runtime::Dimension[rank] {
+ // ISO::CFI_dim_t {
+ // CFI_index_t lower_bound; (ptrdiff_t -> up to 8 bytes)
+ // CFI_index_t extent; (ptrdiff_t -> up to 8 bytes)
+ // CFI_index_t sm; (ptrdiff_t -> up to 8 bytes)
+ // }
+ // }
+ // fortran::runtime::DescriptorAddendum {
+ // const typeInfo::DerivedType *derivedType_; (pointer -> up to 8
+ // bytes) typeInfo::TypeParameterValue len_[lenParameters]; (int64_t -> 8
+ // bytes)
+ // }
+ std::size_t bytes{24u + rank * 24u};
+ if (addendum || lengthTypeParameters > 0) {
+ if (lengthTypeParameters < 1)
+ lengthTypeParameters = 1;
+ bytes += 8u + static_cast<std::size_t>(lengthTypeParameters) * 8u;
+ }
+ return bytes;
+}
+
+} // namespace Fortran::runtime
+
+#endif /* FORTRAN_RUNTIME_DESCRIPTOR_CONSTS_H_ */
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/entry-names.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/entry-names.h
new file mode 100644
index 00000000000..68582b92b54
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/entry-names.h
@@ -0,0 +1,44 @@
+/*===-- include/flang/Runtime/entry-names.h -------------------------*- C -*-=//
+ *
+ * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+ * See https://llvm.org/LICENSE.txt for license information.
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ *
+ *===------------------------------------------------------------------------===
+ */
+
+/* Defines the macro RTNAME(n) which decorates the external name of a runtime
+ * library function or object with extra characters so that it
+ * (a) is not in the user's name space,
+ * (b) doesn't conflict with other libraries, and
+ * (c) prevents incompatible versions of the runtime library from linking
+ *
+ * The value of REVISION should not be changed until/unless the API to the
+ * runtime library must change in some way that breaks backward compatibility.
+ */
+#ifndef FORTRAN_RUNTIME_ENTRY_NAMES_H
+#define FORTRAN_RUNTIME_ENTRY_NAMES_H
+
+#include "flang/Common/api-attrs.h"
+
+#ifndef RTNAME
+#define NAME_WITH_PREFIX_AND_REVISION(prefix, revision, name) \
+ prefix##revision##name
+#define RTNAME(name) NAME_WITH_PREFIX_AND_REVISION(_Fortran, A, name)
+#endif
+
+#ifndef RTDECL
+#define RTDECL(name) RT_API_ATTRS RTNAME(name)
+#endif
+
+#ifndef RTDEF
+#define RTDEF(name) RT_API_ATTRS RTNAME(name)
+#endif
+
+#ifndef RTNAME_STRING
+#define RTNAME_STRINGIFY_(x) #x
+#define RTNAME_STRINGIFY(x) RTNAME_STRINGIFY_(x)
+#define RTNAME_STRING(name) RTNAME_STRINGIFY(RTNAME(name))
+#endif
+
+#endif /* !FORTRAN_RUNTIME_ENTRY_NAMES_H */
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/exceptions.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/exceptions.h
new file mode 100644
index 00000000000..c76376e36ed
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/exceptions.h
@@ -0,0 +1,52 @@
+//===-- include/flang/Runtime/exceptions.h ----------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Support for floating point exceptions and related floating point environment
+// functionality.
+
+#ifndef FORTRAN_RUNTIME_EXCEPTIONS_H_
+#define FORTRAN_RUNTIME_EXCEPTIONS_H_
+
+#include "flang/Runtime/entry-names.h"
+#include <cinttypes>
+#include <cstddef>
+
+namespace Fortran::runtime {
+
+class Descriptor;
+
+extern "C" {
+
+// Map a set of IEEE_FLAG_TYPE exception values to a libm fenv.h excepts value.
+// This mapping is done at runtime to support cross compilation.
+std::uint32_t RTNAME(MapException)(std::uint32_t excepts);
+
+// Exception processing functions that call the corresponding libm functions,
+// and also include support for denormal exceptions where available.
+void RTNAME(feclearexcept)(std::uint32_t excepts);
+void RTNAME(feraiseexcept)(std::uint32_t excepts);
+std::uint32_t RTNAME(fetestexcept)(std::uint32_t excepts);
+void RTNAME(fedisableexcept)(std::uint32_t excepts);
+void RTNAME(feenableexcept)(std::uint32_t excepts);
+std::uint32_t RTNAME(fegetexcept)(void);
+
+// Check if the processor has the ability to control whether to halt
+// or continue exeuction when a given exception is raised.
+bool RTNAME(SupportHalting)(uint32_t except);
+
+// Get and set the ieee underflow mode if supported; otherwise nops.
+bool RTNAME(GetUnderflowMode)(void);
+void RTNAME(SetUnderflowMode)(bool flag);
+
+// Get the byte size of ieee_modes_type and ieee_status_type data.
+std::size_t RTNAME(GetModesTypeSize)(void);
+std::size_t RTNAME(GetStatusTypeSize)(void);
+
+} // extern "C"
+} // namespace Fortran::runtime
+#endif // FORTRAN_RUNTIME_EXCEPTIONS_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/execute.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/execute.h
new file mode 100644
index 00000000000..ca137b9d182
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/execute.h
@@ -0,0 +1,29 @@
+//===-- include/flang/Runtime/command.h -------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_RUNTIME_EXECUTE_H_
+#define FORTRAN_RUNTIME_EXECUTE_H_
+
+#include "flang/Runtime/entry-names.h"
+
+namespace Fortran::runtime {
+class Descriptor;
+
+extern "C" {
+
+// 16.9.83 EXECUTE_COMMAND_LINE
+// Execute a command line.
+// Returns a EXITSTAT, CMDSTAT, and CMDMSG as described in the standard.
+void RTNAME(ExecuteCommandLine)(const Descriptor &command, bool wait = true,
+ const Descriptor *exitstat = nullptr, const Descriptor *cmdstat = nullptr,
+ const Descriptor *cmdmsg = nullptr, const char *sourceFile = nullptr,
+ int line = 0);
+}
+} // namespace Fortran::runtime
+
+#endif // FORTRAN_RUNTIME_EXECUTE_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/extensions.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/extensions.h
new file mode 100644
index 00000000000..06ae7f35d9b
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/extensions.h
@@ -0,0 +1,93 @@
+//===-- include/flang/Runtime/extensions.h ----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// These C-coded entry points with Fortran-mangled names implement legacy
+// extensions that will eventually be implemented in Fortran.
+
+#ifndef FORTRAN_RUNTIME_EXTENSIONS_H_
+#define FORTRAN_RUNTIME_EXTENSIONS_H_
+
+#include "flang/Runtime/entry-names.h"
+
+#define FORTRAN_PROCEDURE_NAME(name) name##_
+
+#include "flang/Runtime/entry-names.h"
+#include <cstddef>
+#include <cstdint>
+
+#ifdef _WIN32
+// UID and GID don't exist on Windows, these exist to avoid errors.
+typedef std::uint32_t uid_t;
+typedef std::uint32_t gid_t;
+#else
+#include "sys/types.h" //pid_t
+#endif
+
+extern "C" {
+
+// CALL FLUSH(n) antedates the Fortran 2003 FLUSH statement.
+void FORTRAN_PROCEDURE_NAME(flush)(const int &unit);
+
+// GNU extension subroutine FDATE
+void FORTRAN_PROCEDURE_NAME(fdate)(char *string, std::int64_t length);
+
+void RTNAME(Free)(std::intptr_t ptr);
+
+// Common extensions FSEEK & FTELL, variously named
+std::int32_t RTNAME(Fseek)(int unit, std::int64_t zeroBasedPos, int whence,
+ const char *sourceFileName, int lineNumber);
+std::int64_t RTNAME(Ftell)(int unit);
+
+// GNU Fortran 77 compatibility function IARGC.
+std::int32_t FORTRAN_PROCEDURE_NAME(iargc)();
+
+// GNU Fortran 77 compatibility subroutine GETARG(N, ARG).
+void FORTRAN_PROCEDURE_NAME(getarg)(
+ std::int32_t &n, char *arg, std::int64_t length);
+
+// Calls getgid()
+gid_t RTNAME(GetGID)();
+
+// Calls getuid()
+uid_t RTNAME(GetUID)();
+
+// GNU extension subroutine GETLOG(C).
+void FORTRAN_PROCEDURE_NAME(getlog)(char *name, std::int64_t length);
+
+// GNU extension subroutine HOSTNM(C)
+int FORTRAN_PROCEDURE_NAME(hostnm)(char *hn, int length);
+
+std::intptr_t RTNAME(Malloc)(std::size_t size);
+
+// GNU extension function STATUS = SIGNAL(number, handler)
+std::int64_t RTNAME(Signal)(std::int64_t number, void (*handler)(int));
+
+// GNU extension subroutine SLEEP(SECONDS)
+void RTNAME(Sleep)(std::int64_t seconds);
+
+// GNU extension function TIME()
+std::int64_t RTNAME(time)();
+
+// GNU extension function ACCESS(NAME, MODE)
+// TODO: not supported on Windows
+#ifndef _WIN32
+std::int64_t FORTRAN_PROCEDURE_NAME(access)(const char *name,
+ std::int64_t nameLength, const char *mode, std::int64_t modeLength);
+#endif
+
+// GNU extension subroutine CHDIR(NAME, [STATUS])
+int RTNAME(Chdir)(const char *name);
+
+// GNU extension function IERRNO()
+int FORTRAN_PROCEDURE_NAME(ierrno)();
+
+// GNU extension subroutine PERROR(STRING)
+void RTNAME(Perror)(const char *str);
+
+} // extern "C"
+#endif // FORTRAN_RUNTIME_EXTENSIONS_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/freestanding-tools.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/freestanding-tools.h
new file mode 100644
index 00000000000..91277a71f41
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/freestanding-tools.h
@@ -0,0 +1,229 @@
+//===-- include/flang/Runtime/freestanding-tools.h --------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_RUNTIME_FREESTANDING_TOOLS_H_
+#define FORTRAN_RUNTIME_FREESTANDING_TOOLS_H_
+
+#include "flang/Common/api-attrs.h"
+#include "flang/Runtime/c-or-cpp.h"
+#include <algorithm>
+#include <cctype>
+#include <cstdlib>
+#include <cstring>
+
+// The file defines a set of utilities/classes that might be
+// used to get reduce the dependency on external libraries (e.g. libstdc++).
+
+#if !defined(STD_FILL_N_UNSUPPORTED) && \
+ (defined(__CUDACC__) || defined(__CUDA__)) && defined(__CUDA_ARCH__)
+#define STD_FILL_N_UNSUPPORTED 1
+#endif
+
+#if !defined(STD_MEMMOVE_UNSUPPORTED) && \
+ (defined(__CUDACC__) || defined(__CUDA__)) && defined(__CUDA_ARCH__)
+#define STD_MEMMOVE_UNSUPPORTED 1
+#endif
+
+#if !defined(STD_STRLEN_UNSUPPORTED) && \
+ (defined(__CUDACC__) || defined(__CUDA__)) && defined(__CUDA_ARCH__)
+#define STD_STRLEN_UNSUPPORTED 1
+#endif
+
+#if !defined(STD_MEMCMP_UNSUPPORTED) && \
+ (defined(__CUDACC__) || defined(__CUDA__)) && defined(__CUDA_ARCH__)
+#define STD_MEMCMP_UNSUPPORTED 1
+#endif
+
+#if !defined(STD_REALLOC_UNSUPPORTED) && \
+ (defined(__CUDACC__) || defined(__CUDA__)) && defined(__CUDA_ARCH__)
+#define STD_REALLOC_UNSUPPORTED 1
+#endif
+
+#if !defined(STD_MEMCHR_UNSUPPORTED) && \
+ (defined(__CUDACC__) || defined(__CUDA__)) && defined(__CUDA_ARCH__)
+#define STD_MEMCHR_UNSUPPORTED 1
+#endif
+
+#if !defined(STD_STRCPY_UNSUPPORTED) && \
+ (defined(__CUDACC__) || defined(__CUDA__)) && defined(__CUDA_ARCH__)
+#define STD_STRCPY_UNSUPPORTED 1
+#endif
+
+#if !defined(STD_STRCMP_UNSUPPORTED) && \
+ (defined(__CUDACC__) || defined(__CUDA__)) && defined(__CUDA_ARCH__)
+#define STD_STRCMP_UNSUPPORTED 1
+#endif
+
+#if !defined(STD_TOUPPER_UNSUPPORTED) && \
+ (defined(__CUDACC__) || defined(__CUDA__)) && defined(__CUDA_ARCH__)
+#define STD_TOUPPER_UNSUPPORTED 1
+#endif
+
+namespace Fortran::runtime {
+
+#if STD_FILL_N_UNSUPPORTED
+// Provides alternative implementation for std::fill_n(), if
+// it is not supported.
+template <typename A, typename B>
+static inline RT_API_ATTRS std::enable_if_t<std::is_convertible_v<B, A>, void>
+fill_n(A *start, std::size_t count, const B &value) {
+ for (std::size_t j{0}; j < count; ++j) {
+ start[j] = value;
+ }
+}
+#else // !STD_FILL_N_UNSUPPORTED
+using std::fill_n;
+#endif // !STD_FILL_N_UNSUPPORTED
+
+#if STD_MEMMOVE_UNSUPPORTED
+// Provides alternative implementation for std::memmove(), if
+// it is not supported.
+static inline RT_API_ATTRS void *memmove(
+ void *dest, const void *src, std::size_t count) {
+ char *to{reinterpret_cast<char *>(dest)};
+ const char *from{reinterpret_cast<const char *>(src)};
+
+ if (to == from) {
+ return dest;
+ }
+ if (to + count <= from || from + count <= to) {
+ std::memcpy(dest, src, count);
+ } else if (to < from) {
+ while (count--) {
+ *to++ = *from++;
+ }
+ } else {
+ to += count;
+ from += count;
+ while (count--) {
+ *--to = *--from;
+ }
+ }
+ return dest;
+}
+#else // !STD_MEMMOVE_UNSUPPORTED
+using std::memmove;
+#endif // !STD_MEMMOVE_UNSUPPORTED
+
+using MemmoveFct = void *(*)(void *, const void *, std::size_t);
+
+#ifdef RT_DEVICE_COMPILATION
+static RT_API_ATTRS void *MemmoveWrapper(
+ void *dest, const void *src, std::size_t count) {
+ return Fortran::runtime::memmove(dest, src, count);
+}
+#endif
+
+#if STD_STRLEN_UNSUPPORTED
+// Provides alternative implementation for std::strlen(), if
+// it is not supported.
+static inline RT_API_ATTRS std::size_t strlen(const char *str) {
+ if (!str) {
+ // Return 0 for nullptr.
+ return 0;
+ }
+ const char *end = str;
+ for (; *end != '\0'; ++end)
+ ;
+ return end - str;
+}
+#else // !STD_STRLEN_UNSUPPORTED
+using std::strlen;
+#endif // !STD_STRLEN_UNSUPPORTED
+
+#if STD_MEMCMP_UNSUPPORTED
+// Provides alternative implementation for std::memcmp(), if
+// it is not supported.
+static inline RT_API_ATTRS int memcmp(
+ const void *RESTRICT lhs, const void *RESTRICT rhs, std::size_t count) {
+ auto m1{reinterpret_cast<const unsigned char *>(lhs)};
+ auto m2{reinterpret_cast<const unsigned char *>(rhs)};
+ for (; count--; ++m1, ++m2) {
+ int diff = *m1 - *m2;
+ if (diff != 0) {
+ return diff;
+ }
+ }
+ return 0;
+}
+#else // !STD_MEMCMP_UNSUPPORTED
+using std::memcmp;
+#endif // !STD_MEMCMP_UNSUPPORTED
+
+#if STD_REALLOC_UNSUPPORTED
+static inline RT_API_ATTRS void *realloc(void *ptr, std::size_t newByteSize) {
+ // Return nullptr and let the callers assert that.
+ // TODO: we can provide a straightforward implementation
+ // via malloc/memcpy/free.
+ return nullptr;
+}
+#else // !STD_REALLOC_UNSUPPORTED
+using std::realloc;
+#endif // !STD_REALLOC_UNSUPPORTED
+
+#if STD_MEMCHR_UNSUPPORTED
+// Provides alternative implementation for std::memchr(), if
+// it is not supported.
+static inline RT_API_ATTRS const void *memchr(
+ const void *ptr, int ch, std::size_t count) {
+ auto buf{reinterpret_cast<const unsigned char *>(ptr)};
+ auto c{static_cast<unsigned char>(ch)};
+ for (; count--; ++buf) {
+ if (*buf == c) {
+ return buf;
+ }
+ }
+ return nullptr;
+}
+#else // !STD_MEMCMP_UNSUPPORTED
+using std::memchr;
+#endif // !STD_MEMCMP_UNSUPPORTED
+
+#if STD_STRCPY_UNSUPPORTED
+// Provides alternative implementation for std::strcpy(), if
+// it is not supported.
+static inline RT_API_ATTRS char *strcpy(char *dest, const char *src) {
+ char *result{dest};
+ do {
+ *dest++ = *src;
+ } while (*src++ != '\0');
+ return result;
+}
+#else // !STD_STRCPY_UNSUPPORTED
+using std::strcpy;
+#endif // !STD_STRCPY_UNSUPPORTED
+
+#if STD_STRCMP_UNSUPPORTED
+// Provides alternative implementation for std::strcmp(), if
+// it is not supported.
+static inline RT_API_ATTRS int strcmp(const char *lhs, const char *rhs) {
+ while (*lhs != '\0' && *lhs == *rhs) {
+ ++lhs;
+ ++rhs;
+ }
+ return static_cast<unsigned char>(*lhs) - static_cast<unsigned char>(*rhs);
+}
+#else // !STD_STRCMP_UNSUPPORTED
+using std::strcmp;
+#endif // !STD_STRCMP_UNSUPPORTED
+
+#if STD_TOUPPER_UNSUPPORTED
+// Provides alternative implementation for std::toupper(), if
+// it is not supported.
+static inline RT_API_ATTRS int toupper(int ch) {
+ if (ch >= 'a' && ch <= 'z') {
+ return ch - 'a' + 'A';
+ }
+ return ch;
+}
+#else // !STD_TOUPPER_UNSUPPORTED
+using std::toupper;
+#endif // !STD_TOUPPER_UNSUPPORTED
+
+} // namespace Fortran::runtime
+#endif // FORTRAN_RUNTIME_FREESTANDING_TOOLS_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/inquiry.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/inquiry.h
new file mode 100644
index 00000000000..c7a7487f1a1
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/inquiry.h
@@ -0,0 +1,43 @@
+//===-- include/flang/Runtime/inquiry.h ----------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Defines the API for the inquiry intrinsic functions
+// that inquire about shape information in arrays: LBOUND and SIZE.
+
+#ifndef FORTRAN_RUNTIME_INQUIRY_H_
+#define FORTRAN_RUNTIME_INQUIRY_H_
+
+#include "flang/Runtime/entry-names.h"
+#include <cinttypes>
+
+namespace Fortran::runtime {
+
+class Descriptor;
+
+extern "C" {
+
+std::int64_t RTDECL(LboundDim)(const Descriptor &array, int dim,
+ const char *sourceFile = nullptr, int line = 0);
+
+void RTDECL(Lbound)(void *result, const Descriptor &array, int kind,
+ const char *sourceFile = nullptr, int line = 0);
+
+void RTDECL(Shape)(void *result, const Descriptor &array, int kind,
+ const char *sourceFile = nullptr, int line = 0);
+std::int64_t RTDECL(Size)(
+ const Descriptor &array, const char *sourceFile = nullptr, int line = 0);
+
+std::int64_t RTDECL(SizeDim)(const Descriptor &array, int dim,
+ const char *sourceFile = nullptr, int line = 0);
+
+void RTDECL(Ubound)(void *result, const Descriptor &array, int kind,
+ const char *sourceFile = nullptr, int line = 0);
+
+} // extern "C"
+} // namespace Fortran::runtime
+#endif // FORTRAN_RUNTIME_INQUIRY_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/io-api.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/io-api.h
new file mode 100644
index 00000000000..988fe536705
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/io-api.h
@@ -0,0 +1,370 @@
+//===-- include/flang/Runtime/io-api.h --------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Defines the API of the I/O runtime support library for lowering.
+
+#ifndef FORTRAN_RUNTIME_IO_API_H_
+#define FORTRAN_RUNTIME_IO_API_H_
+
+#include "flang/Common/uint128.h"
+#include "flang/Runtime/entry-names.h"
+#include "flang/Runtime/iostat-consts.h"
+#include "flang/Runtime/magic-numbers.h"
+#include <cinttypes>
+#include <cstddef>
+
+namespace Fortran::runtime {
+class Descriptor;
+} // namespace Fortran::runtime
+
+namespace Fortran::runtime::io {
+
+struct NonTbpDefinedIoTable;
+class NamelistGroup;
+class IoStatementState;
+using Cookie = IoStatementState *;
+using ExternalUnit = int;
+using AsynchronousId = int;
+
+static constexpr ExternalUnit DefaultOutputUnit{FORTRAN_DEFAULT_OUTPUT_UNIT};
+static constexpr ExternalUnit DefaultInputUnit{FORTRAN_DEFAULT_INPUT_UNIT};
+
+// INQUIRE specifiers are encoded as simple base-26 packings of
+// the spellings of their keywords.
+using InquiryKeywordHash = std::uint64_t;
+constexpr InquiryKeywordHash HashInquiryKeyword(const char *p) {
+ InquiryKeywordHash hash{1};
+ while (char ch{*p++}) {
+ std::uint64_t letter{0};
+ if (ch >= 'a' && ch <= 'z') {
+ letter = ch - 'a';
+ } else {
+ letter = ch - 'A';
+ }
+ hash = 26 * hash + letter;
+ }
+ return hash;
+}
+
+extern "C" {
+
+#define IONAME(name) RTNAME(io##name)
+
+#ifndef IODECL
+#define IODECL(name) RT_API_ATTRS IONAME(name)
+#endif
+
+#ifndef IODEF
+#define IODEF(name) RT_API_ATTRS IONAME(name)
+#endif
+
+// These functions initiate data transfer statements (READ, WRITE, PRINT).
+// Example: PRINT *, 666 is implemented as the series of calls:
+// Cookie cookie{BeginExternalListOutput(DefaultOutputUnit,
+// __FILE__, __LINE__)};
+// OutputInteger32(cookie, 666);
+// EndIoStatement(cookie);
+// Formatted I/O with explicit formats can supply the format as a
+// const char * pointer with a length, or with a descriptor.
+
+// Internal I/O initiation
+// Internal I/O can loan the runtime library an optional block of memory
+// in which the library can maintain state across the calls that implement
+// the internal transfer; use of these blocks can reduce the need for dynamic
+// memory allocation &/or thread-local storage. The block must be sufficiently
+// aligned to hold a pointer.
+constexpr std::size_t RecommendedInternalIoScratchAreaBytes(
+ int maxFormatParenthesesNestingDepth) {
+ return 32 + 8 * maxFormatParenthesesNestingDepth;
+}
+
+// For NAMELIST I/O, use the API for the appropriate form of list-directed
+// I/O initiation and configuration, then call OutputNamelist/InputNamelist
+// below.
+
+// Internal I/O to/from character arrays &/or non-default-kind character
+// requires a descriptor, which is copied.
+Cookie IODECL(BeginInternalArrayListOutput)(const Descriptor &,
+ void **scratchArea = nullptr, std::size_t scratchBytes = 0,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+Cookie IODECL(BeginInternalArrayListInput)(const Descriptor &,
+ void **scratchArea = nullptr, std::size_t scratchBytes = 0,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+Cookie IODECL(BeginInternalArrayFormattedOutput)(const Descriptor &,
+ const char *format, std::size_t formatLength,
+ const Descriptor *formatDescriptor = nullptr, void **scratchArea = nullptr,
+ std::size_t scratchBytes = 0, const char *sourceFile = nullptr,
+ int sourceLine = 0);
+Cookie IODECL(BeginInternalArrayFormattedInput)(const Descriptor &,
+ const char *format, std::size_t formatLength,
+ const Descriptor *formatDescriptor = nullptr, void **scratchArea = nullptr,
+ std::size_t scratchBytes = 0, const char *sourceFile = nullptr,
+ int sourceLine = 0);
+
+// Internal I/O to/from a default-kind character scalar can avoid a
+// descriptor.
+Cookie IODECL(BeginInternalListOutput)(char *internal,
+ std::size_t internalLength, void **scratchArea = nullptr,
+ std::size_t scratchBytes = 0, const char *sourceFile = nullptr,
+ int sourceLine = 0);
+Cookie IODECL(BeginInternalListInput)(const char *internal,
+ std::size_t internalLength, void **scratchArea = nullptr,
+ std::size_t scratchBytes = 0, const char *sourceFile = nullptr,
+ int sourceLine = 0);
+Cookie IODECL(BeginInternalFormattedOutput)(char *internal,
+ std::size_t internalLength, const char *format, std::size_t formatLength,
+ const Descriptor *formatDescriptor = nullptr, void **scratchArea = nullptr,
+ std::size_t scratchBytes = 0, const char *sourceFile = nullptr,
+ int sourceLine = 0);
+Cookie IODECL(BeginInternalFormattedInput)(const char *internal,
+ std::size_t internalLength, const char *format, std::size_t formatLength,
+ const Descriptor *formatDescriptor = nullptr, void **scratchArea = nullptr,
+ std::size_t scratchBytes = 0, const char *sourceFile = nullptr,
+ int sourceLine = 0);
+
+// External unit numbers must fit in default integers. When the integer
+// provided as UNIT is of a wider type than the default integer, it could
+// overflow when converted to a default integer.
+// CheckUnitNumberInRange should be called to verify that a unit number of a
+// wide integer type can fit in a default integer. Since it should be called
+// before the BeginXXX(unit, ...) call, it has its own error handling interface.
+// If handleError is false, and the unit number is out of range, the program
+// will be terminated. Otherwise, if unit is out of range, a nonzero Iostat
+// code is returned and ioMsg is set if it is not a nullptr.
+enum Iostat IODECL(CheckUnitNumberInRange64)(std::int64_t unit,
+ bool handleError, char *ioMsg = nullptr, std::size_t ioMsgLength = 0,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+enum Iostat IODECL(CheckUnitNumberInRange128)(common::int128_t unit,
+ bool handleError, char *ioMsg = nullptr, std::size_t ioMsgLength = 0,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+
+// External synchronous I/O initiation
+Cookie IODECL(BeginExternalListOutput)(ExternalUnit = DefaultOutputUnit,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+Cookie IODECL(BeginExternalListInput)(ExternalUnit = DefaultInputUnit,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+Cookie IODECL(BeginExternalFormattedOutput)(const char *format, std::size_t,
+ const Descriptor *formatDescriptor = nullptr,
+ ExternalUnit = DefaultOutputUnit, const char *sourceFile = nullptr,
+ int sourceLine = 0);
+Cookie IODECL(BeginExternalFormattedInput)(const char *format, std::size_t,
+ const Descriptor *formatDescriptor = nullptr,
+ ExternalUnit = DefaultInputUnit, const char *sourceFile = nullptr,
+ int sourceLine = 0);
+Cookie IODECL(BeginUnformattedOutput)(ExternalUnit = DefaultOutputUnit,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+Cookie IODECL(BeginUnformattedInput)(ExternalUnit = DefaultInputUnit,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+
+// WAIT(ID=)
+Cookie IODECL(BeginWait)(ExternalUnit, AsynchronousId,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+// WAIT(no ID=)
+Cookie IODECL(BeginWaitAll)(
+ ExternalUnit, const char *sourceFile = nullptr, int sourceLine = 0);
+
+// Other I/O statements
+Cookie IODECL(BeginClose)(
+ ExternalUnit, const char *sourceFile = nullptr, int sourceLine = 0);
+Cookie IODECL(BeginFlush)(
+ ExternalUnit, const char *sourceFile = nullptr, int sourceLine = 0);
+Cookie IODECL(BeginBackspace)(
+ ExternalUnit, const char *sourceFile = nullptr, int sourceLine = 0);
+Cookie IODECL(BeginEndfile)(
+ ExternalUnit, const char *sourceFile = nullptr, int sourceLine = 0);
+Cookie IODECL(BeginRewind)(
+ ExternalUnit, const char *sourceFile = nullptr, int sourceLine = 0);
+
+// OPEN(UNIT=) and OPEN(NEWUNIT=) have distinct interfaces.
+Cookie IODECL(BeginOpenUnit)(
+ ExternalUnit, const char *sourceFile = nullptr, int sourceLine = 0);
+Cookie IODECL(BeginOpenNewUnit)(
+ const char *sourceFile = nullptr, int sourceLine = 0);
+
+// The variant forms of INQUIRE() statements have distinct interfaces.
+// BeginInquireIoLength() is basically a no-op output statement.
+Cookie IODECL(BeginInquireUnit)(
+ ExternalUnit, const char *sourceFile = nullptr, int sourceLine = 0);
+Cookie IODECL(BeginInquireFile)(const char *, std::size_t,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+Cookie IODECL(BeginInquireIoLength)(
+ const char *sourceFile = nullptr, int sourceLine = 0);
+
+// If an I/O statement has any IOSTAT=, ERR=, END=, or EOR= specifiers,
+// call EnableHandlers() immediately after the Begin...() call.
+// An output or OPEN statement may not enable HasEnd or HasEor.
+// This call makes the runtime library defer those particular error/end
+// conditions to the EndIoStatement() call rather than terminating
+// the image. E.g., for READ(*,*,END=666) A, B, (C(J),J=1,N)
+// Cookie cookie{BeginExternalListInput(DefaultInputUnit,__FILE__,__LINE__)};
+// EnableHandlers(cookie, false, false, true /*END=*/, false);
+// if (InputReal64(cookie, &A)) {
+// if (InputReal64(cookie, &B)) {
+// for (int J{1}; J<=N; ++J) {
+// if (!InputReal64(cookie, &C[J])) break;
+// }
+// }
+// }
+// if (EndIoStatement(cookie) == FORTRAN_RUTIME_IOSTAT_END) goto label666;
+void IODECL(EnableHandlers)(Cookie, bool hasIoStat = false, bool hasErr = false,
+ bool hasEnd = false, bool hasEor = false, bool hasIoMsg = false);
+
+// ASYNCHRONOUS='YES' or 'NO' on READ/WRITE/OPEN
+// Use GetAsynchronousId() to handle ID=.
+bool IODECL(SetAsynchronous)(Cookie, const char *, std::size_t);
+
+// Control list options. These return false on a error that the
+// Begin...() call has specified will be handled by the caller.
+// The interfaces that pass a default-kind CHARACTER argument
+// are limited to passing specific case-insensitive keyword values.
+// ADVANCE=YES, NO
+bool IODECL(SetAdvance)(Cookie, const char *, std::size_t);
+// BLANK=NULL, ZERO
+bool IODECL(SetBlank)(Cookie, const char *, std::size_t);
+// DECIMAL=COMMA, POINT
+bool IODECL(SetDecimal)(Cookie, const char *, std::size_t);
+// DELIM=APOSTROPHE, QUOTE, NONE
+bool IODECL(SetDelim)(Cookie, const char *, std::size_t);
+// PAD=YES, NO
+bool IODECL(SetPad)(Cookie, const char *, std::size_t);
+bool IODECL(SetPos)(Cookie, std::int64_t);
+bool IODECL(SetRec)(Cookie, std::int64_t);
+// ROUND=UP, DOWN, ZERO, NEAREST, COMPATIBLE, PROCESSOR_DEFINED
+bool IODECL(SetRound)(Cookie, const char *, std::size_t);
+// SIGN=PLUS, SUPPRESS, PROCESSOR_DEFINED
+bool IODECL(SetSign)(Cookie, const char *, std::size_t);
+
+// Data item transfer for modes other than NAMELIST:
+// Any data object that can be passed as an actual argument without the
+// use of a temporary can be transferred by means of a descriptor;
+// vector-valued subscripts and coindexing will require elementwise
+// transfers &/or data copies. Unformatted transfers to/from contiguous
+// blocks of local image memory can avoid the descriptor, and there
+// are specializations for the most common scalar types.
+//
+// These functions return false when the I/O statement has encountered an
+// error or end-of-file/record condition that the caller has indicated
+// should not cause termination of the image by the runtime library.
+// Once the statement has encountered an error, all following items will be
+// ignored and also return false; but compiled code should check for errors
+// and avoid the following items when they might crash.
+bool IODECL(OutputDescriptor)(Cookie, const Descriptor &);
+bool IODECL(InputDescriptor)(Cookie, const Descriptor &);
+// Formatted (including list directed) I/O data items
+bool IODECL(OutputInteger8)(Cookie, std::int8_t);
+bool IODECL(OutputInteger16)(Cookie, std::int16_t);
+bool IODECL(OutputInteger32)(Cookie, std::int32_t);
+bool IODECL(OutputInteger64)(Cookie, std::int64_t);
+bool IODECL(OutputInteger128)(Cookie, common::int128_t);
+bool IODECL(InputInteger)(Cookie, std::int64_t &, int kind = 8);
+bool IODECL(OutputReal32)(Cookie, float);
+bool IODECL(InputReal32)(Cookie, float &);
+bool IODECL(OutputReal64)(Cookie, double);
+bool IODECL(InputReal64)(Cookie, double &);
+bool IODECL(OutputComplex32)(Cookie, float, float);
+bool IODECL(InputComplex32)(Cookie, float[2]);
+bool IODECL(OutputComplex64)(Cookie, double, double);
+bool IODECL(InputComplex64)(Cookie, double[2]);
+bool IODECL(OutputCharacter)(Cookie, const char *, std::size_t, int kind = 1);
+bool IODECL(OutputAscii)(Cookie, const char *, std::size_t);
+bool IODECL(InputCharacter)(Cookie, char *, std::size_t, int kind = 1);
+bool IODECL(InputAscii)(Cookie, char *, std::size_t);
+bool IODECL(OutputLogical)(Cookie, bool);
+bool IODECL(InputLogical)(Cookie, bool &);
+
+// NAMELIST I/O must be the only data item in an (otherwise)
+// list-directed I/O statement.
+bool IODECL(OutputNamelist)(Cookie, const NamelistGroup &);
+bool IODECL(InputNamelist)(Cookie, const NamelistGroup &);
+
+// When an I/O list item has a derived type with a specific defined
+// I/O subroutine of the appropriate generic kind for the active
+// I/O data transfer statement (read/write, formatted/unformatted)
+// that pertains to the type or its components, and those subroutines
+// are dynamic or neither type-bound nor defined with interfaces
+// in the same scope as the derived type (or an IMPORT statement has
+// made such a generic interface inaccessible), these data item transfer
+// APIs enable the I/O runtime to make the right calls to defined I/O
+// subroutines.
+bool IODECL(OutputDerivedType)(
+ Cookie, const Descriptor &, const NonTbpDefinedIoTable *);
+bool IODECL(InputDerivedType)(
+ Cookie, const Descriptor &, const NonTbpDefinedIoTable *);
+
+// Additional specifier interfaces for the connection-list of
+// on OPEN statement (only). SetBlank(), SetDecimal(),
+// SetDelim(), GetIoMsg(), SetPad(), SetRound(), SetSign(),
+// & SetAsynchronous() are also acceptable for OPEN.
+// ACCESS=SEQUENTIAL, DIRECT, STREAM
+bool IODECL(SetAccess)(Cookie, const char *, std::size_t);
+// ACTION=READ, WRITE, or READWRITE
+bool IODECL(SetAction)(Cookie, const char *, std::size_t);
+// CARRIAGECONTROL=LIST, FORTRAN, NONE
+bool IODECL(SetCarriagecontrol)(Cookie, const char *, std::size_t);
+// CONVERT=NATIVE, LITTLE_ENDIAN, BIG_ENDIAN, or SWAP
+bool IODECL(SetConvert)(Cookie, const char *, std::size_t);
+// ENCODING=UTF-8, DEFAULT
+bool IODECL(SetEncoding)(Cookie, const char *, std::size_t);
+// FORM=FORMATTED, UNFORMATTED
+bool IODECL(SetForm)(Cookie, const char *, std::size_t);
+// POSITION=ASIS, REWIND, APPEND
+bool IODECL(SetPosition)(Cookie, const char *, std::size_t);
+bool IODECL(SetRecl)(Cookie, std::size_t); // RECL=
+
+// STATUS can be set during an OPEN or CLOSE statement.
+// For OPEN: STATUS=OLD, NEW, SCRATCH, REPLACE, UNKNOWN
+// For CLOSE: STATUS=KEEP, DELETE
+bool IODECL(SetStatus)(Cookie, const char *, std::size_t);
+
+bool IODECL(SetFile)(Cookie, const char *, std::size_t chars);
+
+// Acquires the runtime-created unit number for OPEN(NEWUNIT=)
+bool IODECL(GetNewUnit)(Cookie, int &, int kind = 4);
+
+// READ(SIZE=), after all input items
+std::size_t IODECL(GetSize)(Cookie);
+
+// INQUIRE(IOLENGTH=), after all output items
+std::size_t IODECL(GetIoLength)(Cookie);
+
+// GetIoMsg() does not modify its argument unless an error or
+// end-of-record/file condition is present.
+void IODECL(GetIoMsg)(Cookie, char *, std::size_t); // IOMSG=
+
+// Defines ID= on READ/WRITE(ASYNCHRONOUS='YES')
+AsynchronousId IODECL(GetAsynchronousId)(Cookie);
+
+// INQUIRE() specifiers are mostly identified by their NUL-terminated
+// case-insensitive names.
+// ACCESS, ACTION, ASYNCHRONOUS, BLANK, CONVERT, DECIMAL, DELIM, DIRECT,
+// ENCODING, FORM, FORMATTED, NAME, PAD, POSITION, READ, READWRITE, ROUND,
+// SEQUENTIAL, SIGN, STREAM, UNFORMATTED, WRITE:
+bool IODECL(InquireCharacter)(Cookie, InquiryKeywordHash, char *, std::size_t);
+// EXIST, NAMED, OPENED, and PENDING (without ID):
+bool IODECL(InquireLogical)(Cookie, InquiryKeywordHash, bool &);
+// PENDING with ID
+bool IODECL(InquirePendingId)(Cookie, AsynchronousId, bool &);
+// NEXTREC, NUMBER, POS, RECL, SIZE
+bool IODECL(InquireInteger64)(
+ Cookie, InquiryKeywordHash, std::int64_t &, int kind = 8);
+
+// This function must be called to end an I/O statement, and its
+// cookie value may not be used afterwards unless it is recycled
+// by the runtime library to serve a later I/O statement.
+// The return value can be used to implement IOSTAT=, ERR=, END=, & EOR=;
+// store it into the IOSTAT= variable if there is one, and test
+// it to implement the various branches. The error condition
+// returned is guaranteed to only be one of the problems that the
+// EnableHandlers() call has indicated should be handled in compiled code
+// rather than by terminating the image.
+enum Iostat IODECL(EndIoStatement)(Cookie);
+
+} // extern "C"
+} // namespace Fortran::runtime::io
+
+#endif /* FORTRAN_RUNTIME_IO_API_H_ */
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/iostat-consts.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/iostat-consts.h
new file mode 100644
index 00000000000..26bf75f59fa
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/iostat-consts.h
@@ -0,0 +1,93 @@
+//===-- include/flang/Runtime/iostat-consts.h -------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_RUNTIME_IOSTAT_CONSTS_H_
+#define FORTRAN_RUNTIME_IOSTAT_CONSTS_H_
+
+#include "flang/Common/api-attrs.h"
+#include "flang/Runtime/magic-numbers.h"
+
+namespace Fortran::runtime::io {
+
+// The value of IOSTAT= is zero when no error, end-of-record,
+// or end-of-file condition has arisen; errors are positive values.
+// (See 12.11.5 in Fortran 2018 for the complete requirements;
+// these constants must match the values of their corresponding
+// named constants in the predefined module ISO_FORTRAN_ENV, so
+// they're actually defined in another magic-numbers.h header file
+// so that they can be included both here and there.)
+enum Iostat {
+ IostatOk = 0, // no error, EOF, or EOR condition
+
+ // These error codes are required by Fortran (see 12.10.2.16-17) to be
+ // negative integer values
+ IostatEnd = FORTRAN_RUNTIME_IOSTAT_END, // end-of-file on input & no error
+ // End-of-record on non-advancing input, no EOF or error
+ IostatEor = FORTRAN_RUNTIME_IOSTAT_EOR,
+
+ // This value is also required to be negative (12.11.5 bullet 6).
+ // It signifies a FLUSH statement on an unflushable unit.
+ IostatUnflushable = FORTRAN_RUNTIME_IOSTAT_FLUSH,
+
+ // Other errors are positive. We use "errno" values unchanged.
+ // This error is exported in ISO_Fortran_env.
+ IostatInquireInternalUnit = FORTRAN_RUNTIME_IOSTAT_INQUIRE_INTERNAL_UNIT,
+
+ // The remaining error codes are not exported.
+ IostatGenericError = 1001, // see IOMSG= for details
+ IostatRecordWriteOverrun,
+ IostatRecordReadOverrun,
+ IostatInternalWriteOverrun,
+ IostatErrorInFormat,
+ IostatErrorInKeyword,
+ IostatEndfileDirect,
+ IostatEndfileUnwritable,
+ IostatOpenBadRecl,
+ IostatOpenUnknownSize,
+ IostatOpenBadAppend,
+ IostatWriteToReadOnly,
+ IostatReadFromWriteOnly,
+ IostatBackspaceNonSequential,
+ IostatBackspaceAtFirstRecord,
+ IostatRewindNonSequential,
+ IostatWriteAfterEndfile,
+ IostatFormattedIoOnUnformattedUnit,
+ IostatUnformattedIoOnFormattedUnit,
+ IostatListIoOnDirectAccessUnit,
+ IostatUnformattedChildOnFormattedParent,
+ IostatFormattedChildOnUnformattedParent,
+ IostatChildInputFromOutputParent,
+ IostatChildOutputToInputParent,
+ IostatShortRead,
+ IostatMissingTerminator,
+ IostatBadUnformattedRecord,
+ IostatUTF8Decoding,
+ IostatUnitOverflow,
+ IostatBadRealInput,
+ IostatBadScaleFactor,
+ IostatBadAsynchronous,
+ IostatBadWaitUnit,
+ IostatBOZInputOverflow,
+ IostatIntegerInputOverflow,
+ IostatRealInputOverflow,
+ IostatOpenAlreadyConnected,
+ IostatCannotReposition,
+ IostatBadWaitId,
+ IostatTooManyAsyncOps,
+ IostatBadBackspaceUnit,
+ IostatBadUnitNumber,
+ IostatBadFlushUnit,
+ IostatBadOpOnChildUnit,
+ IostatBadNewUnit,
+ IostatBadListDirectedInputSeparator,
+ IostatNonExternalDefinedUnformattedIo,
+};
+
+} // namespace Fortran::runtime::io
+
+#endif // FORTRAN_RUNTIME_IOSTAT_CONSTS_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/iostat.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/iostat.h
new file mode 100644
index 00000000000..d8db68a3a1c
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/iostat.h
@@ -0,0 +1,23 @@
+//===-- include/flang/Runtime/iostat.h --------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Defines the values returned by the runtime for IOSTAT= specifiers
+// on I/O statements.
+
+#ifndef FORTRAN_RUNTIME_IOSTAT_H_
+#define FORTRAN_RUNTIME_IOSTAT_H_
+
+#include "flang/Common/api-attrs.h"
+#include "flang/Runtime/iostat-consts.h"
+
+namespace Fortran::runtime::io {
+
+RT_API_ATTRS const char *IostatErrorString(int);
+
+} // namespace Fortran::runtime::io
+#endif // FORTRAN_RUNTIME_IOSTAT_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/magic-numbers.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/magic-numbers.h
new file mode 100644
index 00000000000..6788ba098bc
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/magic-numbers.h
@@ -0,0 +1,129 @@
+#if 0 /*===-- include/flang/Runtime/magic-numbers.h -----------------------===*/
+/*
+ * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+ * See https://llvm.org/LICENSE.txt for license information.
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ *
+ *===----------------------------------------------------------------------===*/
+#endif
+#if 0
+This header can be included into both Fortran and C.
+
+This file defines various code values that need to be exported
+to predefined Fortran standard modules as well as to C/C++
+code in the compiler and runtime library.
+These include:
+ - the error/end code values that can be returned
+ to an IOSTAT= or STAT= specifier on a Fortran I/O statement
+ or coindexed data reference (see Fortran 2018 12.11.5,
+ 16.10.2, and 16.10.2.33)
+Codes from <errno.h>, e.g. ENOENT, are assumed to be positive
+and are used "raw" as IOSTAT values.
+
+CFI_ERROR_xxx and CFI_INVALID_xxx macros from ISO_Fortran_binding.h
+have small positive values. The FORTRAN_RUNTIME_STAT_xxx macros here
+start at 100 so as to never conflict with those codes.
+#endif
+#ifndef FORTRAN_RUNTIME_MAGIC_NUMBERS_H_
+#define FORTRAN_RUNTIME_MAGIC_NUMBERS_H_
+
+#define FORTRAN_DEFAULT_OUTPUT_UNIT 6
+#define FORTRAN_DEFAULT_INPUT_UNIT 5
+#define FORTRAN_ERROR_UNIT 0
+
+#define FORTRAN_RUNTIME_IOSTAT_END (-1)
+#define FORTRAN_RUNTIME_IOSTAT_EOR (-2)
+#define FORTRAN_RUNTIME_IOSTAT_FLUSH (-3)
+#define FORTRAN_RUNTIME_IOSTAT_INQUIRE_INTERNAL_UNIT 256
+
+#define FORTRAN_RUNTIME_STAT_FAILED_IMAGE 101
+#define FORTRAN_RUNTIME_STAT_LOCKED 102
+#define FORTRAN_RUNTIME_STAT_LOCKED_OTHER_IMAGE 103
+#define FORTRAN_RUNTIME_STAT_STOPPED_IMAGE 104
+#define FORTRAN_RUNTIME_STAT_UNLOCKED 105
+#define FORTRAN_RUNTIME_STAT_UNLOCKED_FAILED_IMAGE 106
+
+#if 0
+Status codes for GET_COMMAND_ARGUMENT. The status for 'value too short' needs
+to be -1, the others must be positive.
+#endif
+#define FORTRAN_RUNTIME_STAT_INVALID_ARG_NUMBER 107
+#define FORTRAN_RUNTIME_STAT_MISSING_ARG 108
+#define FORTRAN_RUNTIME_STAT_VALUE_TOO_SHORT -1
+
+#if 0
+Status codes for GET_ENVIRONMENT_VARIABLE. Values mandated by the standard.
+#endif
+#define FORTRAN_RUNTIME_STAT_MISSING_ENV_VAR 1
+#define FORTRAN_RUNTIME_STAT_ENV_VARS_UNSUPPORTED 2
+
+#if 0
+Processor-defined status code for MOVE_ALLOC where arguments are the
+same allocatable.
+#endif
+#define FORTRAN_RUNTIME_STAT_MOVE_ALLOC_SAME_ALLOCATABLE 109
+
+#if 0
+Additional status code for a bad pointer DEALLOCATE.
+#endif
+#define FORTRAN_RUNTIME_STAT_BAD_POINTER_DEALLOCATION 110
+
+#if 0
+Status codes for GETCWD.
+#endif
+#define FORTRAN_RUNTIME_STAT_MISSING_CWD 111
+
+#if 0
+ieee_class_type values
+The sequence is that of F18 Clause 17.2p3, but nothing depends on that.
+#endif
+#define _FORTRAN_RUNTIME_IEEE_SIGNALING_NAN 1
+#define _FORTRAN_RUNTIME_IEEE_QUIET_NAN 2
+#define _FORTRAN_RUNTIME_IEEE_NEGATIVE_INF 3
+#define _FORTRAN_RUNTIME_IEEE_NEGATIVE_NORMAL 4
+#define _FORTRAN_RUNTIME_IEEE_NEGATIVE_SUBNORMAL 5
+#define _FORTRAN_RUNTIME_IEEE_NEGATIVE_ZERO 6
+#define _FORTRAN_RUNTIME_IEEE_POSITIVE_ZERO 7
+#define _FORTRAN_RUNTIME_IEEE_POSITIVE_SUBNORMAL 8
+#define _FORTRAN_RUNTIME_IEEE_POSITIVE_NORMAL 9
+#define _FORTRAN_RUNTIME_IEEE_POSITIVE_INF 10
+#define _FORTRAN_RUNTIME_IEEE_OTHER_VALUE 11
+
+#if 0
+ieee_flag_type values
+The values are those of a common but not universal fenv.h file.
+The denorm value is a nonstandard extension.
+#endif
+#define _FORTRAN_RUNTIME_IEEE_INVALID 1
+#define _FORTRAN_RUNTIME_IEEE_DENORM 2
+#define _FORTRAN_RUNTIME_IEEE_DIVIDE_BY_ZERO 4
+#define _FORTRAN_RUNTIME_IEEE_OVERFLOW 8
+#define _FORTRAN_RUNTIME_IEEE_UNDERFLOW 16
+#define _FORTRAN_RUNTIME_IEEE_INEXACT 32
+#define _FORTRAN_RUNTIME_IEEE_ALL \
+ _FORTRAN_RUNTIME_IEEE_INVALID | _FORTRAN_RUNTIME_IEEE_DENORM | \
+ _FORTRAN_RUNTIME_IEEE_DIVIDE_BY_ZERO | _FORTRAN_RUNTIME_IEEE_OVERFLOW | \
+ _FORTRAN_RUNTIME_IEEE_UNDERFLOW | _FORTRAN_RUNTIME_IEEE_INEXACT
+
+#if 0
+ieee_round_type values
+The values are those of the llvm.get.rounding intrinsic, which is assumed by
+ieee_arithmetic module rounding procedures.
+#endif
+#define _FORTRAN_RUNTIME_IEEE_TO_ZERO 0
+#define _FORTRAN_RUNTIME_IEEE_NEAREST 1
+#define _FORTRAN_RUNTIME_IEEE_UP 2
+#define _FORTRAN_RUNTIME_IEEE_DOWN 3
+#define _FORTRAN_RUNTIME_IEEE_AWAY 4
+#define _FORTRAN_RUNTIME_IEEE_OTHER 5
+
+#if 0
+INTEGER(kind=4) extents for ieee_exceptions module types ieee_modes_type and
+ieee_status_type. These extent values are large enough to hold femode_t and
+fenv_t data in many environments. An environment that does not meet these
+size constraints may allocate memory with runtime size values.
+#endif
+#define _FORTRAN_RUNTIME_IEEE_FEMODE_T_EXTENT 2
+#define _FORTRAN_RUNTIME_IEEE_FENV_T_EXTENT 8
+
+#endif
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/main.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/main.h
new file mode 100644
index 00000000000..88232ea64fa
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/main.h
@@ -0,0 +1,23 @@
+//===-- include/flang/Runtime/main.h ----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_RUNTIME_MAIN_H_
+#define FORTRAN_RUNTIME_MAIN_H_
+
+#include "flang/Runtime/c-or-cpp.h"
+#include "flang/Runtime/entry-names.h"
+
+struct EnvironmentDefaultList;
+
+FORTRAN_EXTERN_C_BEGIN
+void RTNAME(ProgramStart)(
+ int, const char *[], const char *[], const struct EnvironmentDefaultList *);
+void RTNAME(ByteswapOption)(void); // -byteswapio
+FORTRAN_EXTERN_C_END
+
+#endif // FORTRAN_RUNTIME_MAIN_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/matmul-instances.inc b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/matmul-instances.inc
new file mode 100644
index 00000000000..21269d0b3fe
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/matmul-instances.inc
@@ -0,0 +1,338 @@
+//===-- include/flang/Runtime/matmul-instances.inc --------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+// Helper macros to instantiate MATMUL/MATMUL_TRANSPOSE definitions
+// for different data types of the input arguments.
+//===----------------------------------------------------------------------===//
+
+#ifndef MATMUL_INSTANCE
+#error "Define MATMUL_INSTANCE before including this file"
+#endif
+
+#ifndef MATMUL_DIRECT_INSTANCE
+#error "Define MATMUL_DIRECT_INSTANCE before including this file"
+#endif
+
+#ifndef MATMUL_FORCE_ALL_TYPES
+#error "Define MATMUL_FORCE_ALL_TYPES to 0 or 1 before including this file"
+#endif
+
+// clang-format off
+
+#define FOREACH_MATMUL_TYPE_PAIR(macro) \
+ macro(Integer, 1, Integer, 1) \
+ macro(Integer, 1, Integer, 2) \
+ macro(Integer, 1, Integer, 4) \
+ macro(Integer, 1, Integer, 8) \
+ macro(Integer, 2, Integer, 1) \
+ macro(Integer, 2, Integer, 2) \
+ macro(Integer, 2, Integer, 4) \
+ macro(Integer, 2, Integer, 8) \
+ macro(Integer, 4, Integer, 1) \
+ macro(Integer, 4, Integer, 2) \
+ macro(Integer, 4, Integer, 4) \
+ macro(Integer, 4, Integer, 8) \
+ macro(Integer, 8, Integer, 1) \
+ macro(Integer, 8, Integer, 2) \
+ macro(Integer, 8, Integer, 4) \
+ macro(Integer, 8, Integer, 8) \
+ macro(Integer, 1, Real, 4) \
+ macro(Integer, 1, Real, 8) \
+ macro(Integer, 2, Real, 4) \
+ macro(Integer, 2, Real, 8) \
+ macro(Integer, 4, Real, 4) \
+ macro(Integer, 4, Real, 8) \
+ macro(Integer, 8, Real, 4) \
+ macro(Integer, 8, Real, 8) \
+ macro(Integer, 1, Complex, 4) \
+ macro(Integer, 1, Complex, 8) \
+ macro(Integer, 2, Complex, 4) \
+ macro(Integer, 2, Complex, 8) \
+ macro(Integer, 4, Complex, 4) \
+ macro(Integer, 4, Complex, 8) \
+ macro(Integer, 8, Complex, 4) \
+ macro(Integer, 8, Complex, 8) \
+ macro(Unsigned, 1, Real, 4) \
+ macro(Unsigned, 1, Real, 8) \
+ macro(Unsigned, 2, Real, 4) \
+ macro(Unsigned, 2, Real, 8) \
+ macro(Unsigned, 4, Real, 4) \
+ macro(Unsigned, 4, Real, 8) \
+ macro(Unsigned, 8, Real, 4) \
+ macro(Unsigned, 8, Real, 8) \
+ macro(Unsigned, 1, Complex, 4) \
+ macro(Unsigned, 1, Complex, 8) \
+ macro(Unsigned, 2, Complex, 4) \
+ macro(Unsigned, 2, Complex, 8) \
+ macro(Unsigned, 4, Complex, 4) \
+ macro(Unsigned, 4, Complex, 8) \
+ macro(Unsigned, 8, Complex, 4) \
+ macro(Unsigned, 8, Complex, 8) \
+ macro(Real, 4, Integer, 1) \
+ macro(Real, 4, Integer, 2) \
+ macro(Real, 4, Integer, 4) \
+ macro(Real, 4, Integer, 8) \
+ macro(Real, 8, Integer, 1) \
+ macro(Real, 8, Integer, 2) \
+ macro(Real, 8, Integer, 4) \
+ macro(Real, 8, Integer, 8) \
+ macro(Real, 4, Unsigned, 1) \
+ macro(Real, 4, Unsigned, 2) \
+ macro(Real, 4, Unsigned, 4) \
+ macro(Real, 4, Unsigned, 8) \
+ macro(Real, 8, Unsigned, 1) \
+ macro(Real, 8, Unsigned, 2) \
+ macro(Real, 8, Unsigned, 4) \
+ macro(Real, 8, Unsigned, 8) \
+ macro(Real, 4, Real, 4) \
+ macro(Real, 4, Real, 8) \
+ macro(Real, 8, Real, 4) \
+ macro(Real, 8, Real, 8) \
+ macro(Real, 4, Complex, 4) \
+ macro(Real, 4, Complex, 8) \
+ macro(Real, 8, Complex, 4) \
+ macro(Real, 8, Complex, 8) \
+ macro(Complex, 4, Integer, 1) \
+ macro(Complex, 4, Integer, 2) \
+ macro(Complex, 4, Integer, 4) \
+ macro(Complex, 4, Integer, 8) \
+ macro(Complex, 8, Integer, 1) \
+ macro(Complex, 8, Integer, 2) \
+ macro(Complex, 8, Integer, 4) \
+ macro(Complex, 8, Integer, 8) \
+ macro(Complex, 4, Unsigned, 1) \
+ macro(Complex, 4, Unsigned, 2) \
+ macro(Complex, 4, Unsigned, 4) \
+ macro(Complex, 4, Unsigned, 8) \
+ macro(Complex, 8, Unsigned, 1) \
+ macro(Complex, 8, Unsigned, 2) \
+ macro(Complex, 8, Unsigned, 4) \
+ macro(Complex, 8, Unsigned, 8) \
+ macro(Complex, 4, Real, 4) \
+ macro(Complex, 4, Real, 8) \
+ macro(Complex, 8, Real, 4) \
+ macro(Complex, 8, Real, 8) \
+ macro(Complex, 4, Complex, 4) \
+ macro(Complex, 4, Complex, 8) \
+ macro(Complex, 8, Complex, 4) \
+ macro(Complex, 8, Complex, 8) \
+
+FOREACH_MATMUL_TYPE_PAIR(MATMUL_INSTANCE)
+FOREACH_MATMUL_TYPE_PAIR(MATMUL_DIRECT_INSTANCE)
+
+#if MATMUL_FORCE_ALL_TYPES || (defined __SIZEOF_INT128__ && !AVOID_NATIVE_UINT128_T)
+#define FOREACH_MATMUL_TYPE_PAIR_WITH_INT16(macro) \
+ macro(Integer, 16, Integer, 1) \
+ macro(Integer, 16, Integer, 2) \
+ macro(Integer, 16, Integer, 4) \
+ macro(Integer, 16, Integer, 8) \
+ macro(Integer, 16, Integer, 16) \
+ macro(Integer, 16, Real, 4) \
+ macro(Integer, 16, Real, 8) \
+ macro(Integer, 16, Complex, 4) \
+ macro(Integer, 16, Complex, 8) \
+ macro(Unsigned, 16, Real, 4) \
+ macro(Unsigned, 16, Real, 8) \
+ macro(Unsigned, 16, Complex, 4) \
+ macro(Unsigned, 16, Complex, 8) \
+ macro(Real, 4, Integer, 16) \
+ macro(Real, 8, Integer, 16) \
+ macro(Complex, 4, Integer, 16) \
+ macro(Complex, 8, Integer, 16) \
+ macro(Real, 4, Unsigned, 16) \
+ macro(Real, 8, Unsigned, 16) \
+ macro(Complex, 4, Unsigned, 16) \
+ macro(Complex, 8, Unsigned, 16) \
+
+FOREACH_MATMUL_TYPE_PAIR_WITH_INT16(MATMUL_INSTANCE)
+FOREACH_MATMUL_TYPE_PAIR_WITH_INT16(MATMUL_DIRECT_INSTANCE)
+
+#if MATMUL_FORCE_ALL_TYPES || HAS_FLOAT80
+MATMUL_INSTANCE(Integer, 16, Real, 10)
+MATMUL_INSTANCE(Integer, 16, Complex, 10)
+MATMUL_INSTANCE(Real, 10, Integer, 16)
+MATMUL_INSTANCE(Complex, 10, Integer, 16)
+MATMUL_INSTANCE(Unsigned, 16, Real, 10)
+MATMUL_INSTANCE(Unsigned, 16, Complex, 10)
+MATMUL_INSTANCE(Real, 10, Unsigned, 16)
+MATMUL_INSTANCE(Complex, 10, Unsigned, 16)
+MATMUL_DIRECT_INSTANCE(Integer, 16, Real, 10)
+MATMUL_DIRECT_INSTANCE(Integer, 16, Complex, 10)
+MATMUL_DIRECT_INSTANCE(Real, 10, Integer, 16)
+MATMUL_DIRECT_INSTANCE(Complex, 10, Integer, 16)
+MATMUL_DIRECT_INSTANCE(Unsigned, 16, Real, 10)
+MATMUL_DIRECT_INSTANCE(Unsigned, 16, Complex, 10)
+MATMUL_DIRECT_INSTANCE(Real, 10, Unsigned, 16)
+MATMUL_DIRECT_INSTANCE(Complex, 10, Unsigned, 16)
+#endif
+#if MATMUL_FORCE_ALL_TYPES || (HAS_LDBL128 || HAS_FLOAT128)
+MATMUL_INSTANCE(Integer, 16, Real, 16)
+MATMUL_INSTANCE(Integer, 16, Complex, 16)
+MATMUL_INSTANCE(Real, 16, Integer, 16)
+MATMUL_INSTANCE(Complex, 16, Integer, 16)
+MATMUL_INSTANCE(Unsigned, 16, Real, 16)
+MATMUL_INSTANCE(Unsigned, 16, Complex, 16)
+MATMUL_INSTANCE(Real, 16, Unsigned, 16)
+MATMUL_INSTANCE(Complex, 16, Unsigned, 16)
+MATMUL_DIRECT_INSTANCE(Integer, 16, Real, 16)
+MATMUL_DIRECT_INSTANCE(Integer, 16, Complex, 16)
+MATMUL_DIRECT_INSTANCE(Real, 16, Integer, 16)
+MATMUL_DIRECT_INSTANCE(Complex, 16, Integer, 16)
+MATMUL_DIRECT_INSTANCE(Unsigned, 16, Real, 16)
+MATMUL_DIRECT_INSTANCE(Unsigned, 16, Complex, 16)
+MATMUL_DIRECT_INSTANCE(Real, 16, Unsigned, 16)
+MATMUL_DIRECT_INSTANCE(Complex, 16, Unsigned, 16)
+#endif
+#endif // MATMUL_FORCE_ALL_TYPES || (defined __SIZEOF_INT128__ && !AVOID_NATIVE_UINT128_T)
+
+#if MATMUL_FORCE_ALL_TYPES || HAS_FLOAT80
+#define FOREACH_MATMUL_TYPE_PAIR_WITH_REAL10(macro) \
+ macro(Integer, 1, Real, 10) \
+ macro(Integer, 1, Complex, 10) \
+ macro(Integer, 2, Real, 10) \
+ macro(Integer, 2, Complex, 10) \
+ macro(Integer, 4, Real, 10) \
+ macro(Integer, 4, Complex, 10) \
+ macro(Integer, 8, Real, 10) \
+ macro(Integer, 8, Complex, 10) \
+ macro(Unsigned, 1, Real, 10) \
+ macro(Unsigned, 1, Complex, 10) \
+ macro(Unsigned, 2, Real, 10) \
+ macro(Unsigned, 2, Complex, 10) \
+ macro(Unsigned, 4, Real, 10) \
+ macro(Unsigned, 4, Complex, 10) \
+ macro(Unsigned, 8, Real, 10) \
+ macro(Unsigned, 8, Complex, 10) \
+ macro(Real, 4, Real, 10) \
+ macro(Real, 4, Complex, 10) \
+ macro(Real, 8, Real, 10) \
+ macro(Real, 8, Complex, 10) \
+ macro(Real, 10, Integer, 1) \
+ macro(Real, 10, Integer, 2) \
+ macro(Real, 10, Integer, 4) \
+ macro(Real, 10, Integer, 8) \
+ macro(Real, 10, Unsigned, 1) \
+ macro(Real, 10, Unsigned, 2) \
+ macro(Real, 10, Unsigned, 4) \
+ macro(Real, 10, Unsigned, 8) \
+ macro(Real, 10, Real, 4) \
+ macro(Real, 10, Real, 8) \
+ macro(Real, 10, Real, 10) \
+ macro(Real, 10, Complex, 4) \
+ macro(Real, 10, Complex, 8) \
+ macro(Real, 10, Complex, 10) \
+ macro(Complex, 4, Real, 10) \
+ macro(Complex, 4, Complex, 10) \
+ macro(Complex, 8, Real, 10) \
+ macro(Complex, 8, Complex, 10) \
+ macro(Complex, 10, Integer, 1) \
+ macro(Complex, 10, Integer, 2) \
+ macro(Complex, 10, Integer, 4) \
+ macro(Complex, 10, Integer, 8) \
+ macro(Complex, 10, Unsigned, 1) \
+ macro(Complex, 10, Unsigned, 2) \
+ macro(Complex, 10, Unsigned, 4) \
+ macro(Complex, 10, Unsigned, 8) \
+ macro(Complex, 10, Real, 4) \
+ macro(Complex, 10, Real, 8) \
+ macro(Complex, 10, Real, 10) \
+ macro(Complex, 10, Complex, 4) \
+ macro(Complex, 10, Complex, 8) \
+ macro(Complex, 10, Complex, 10) \
+
+FOREACH_MATMUL_TYPE_PAIR_WITH_REAL10(MATMUL_INSTANCE)
+FOREACH_MATMUL_TYPE_PAIR_WITH_REAL10(MATMUL_DIRECT_INSTANCE)
+
+#if MATMUL_FORCE_ALL_TYPES || HAS_FLOAT128
+MATMUL_INSTANCE(Real, 10, Real, 16)
+MATMUL_INSTANCE(Real, 10, Complex, 16)
+MATMUL_INSTANCE(Real, 16, Real, 10)
+MATMUL_INSTANCE(Real, 16, Complex, 10)
+MATMUL_INSTANCE(Complex, 10, Real, 16)
+MATMUL_INSTANCE(Complex, 10, Complex, 16)
+MATMUL_INSTANCE(Complex, 16, Real, 10)
+MATMUL_INSTANCE(Complex, 16, Complex, 10)
+MATMUL_DIRECT_INSTANCE(Real, 10, Real, 16)
+MATMUL_DIRECT_INSTANCE(Real, 10, Complex, 16)
+MATMUL_DIRECT_INSTANCE(Real, 16, Real, 10)
+MATMUL_DIRECT_INSTANCE(Real, 16, Complex, 10)
+MATMUL_DIRECT_INSTANCE(Complex, 10, Real, 16)
+MATMUL_DIRECT_INSTANCE(Complex, 10, Complex, 16)
+MATMUL_DIRECT_INSTANCE(Complex, 16, Real, 10)
+MATMUL_DIRECT_INSTANCE(Complex, 16, Complex, 10)
+#endif
+#endif // MATMUL_FORCE_ALL_TYPES || HAS_FLOAT80
+
+#if MATMUL_FORCE_ALL_TYPES || (HAS_LDBL128 || HAS_FLOAT128)
+#define FOREACH_MATMUL_TYPE_PAIR_WITH_REAL16(macro) \
+ macro(Integer, 1, Real, 16) \
+ macro(Integer, 1, Complex, 16) \
+ macro(Integer, 2, Real, 16) \
+ macro(Integer, 2, Complex, 16) \
+ macro(Integer, 4, Real, 16) \
+ macro(Integer, 4, Complex, 16) \
+ macro(Integer, 8, Real, 16) \
+ macro(Integer, 8, Complex, 16) \
+ macro(Real, 4, Real, 16) \
+ macro(Real, 4, Complex, 16) \
+ macro(Real, 8, Real, 16) \
+ macro(Real, 8, Complex, 16) \
+ macro(Real, 16, Integer, 1) \
+ macro(Real, 16, Integer, 2) \
+ macro(Real, 16, Integer, 4) \
+ macro(Real, 16, Integer, 8) \
+ macro(Real, 16, Real, 4) \
+ macro(Real, 16, Real, 8) \
+ macro(Real, 16, Real, 16) \
+ macro(Real, 16, Complex, 4) \
+ macro(Real, 16, Complex, 8) \
+ macro(Real, 16, Complex, 16) \
+ macro(Complex, 4, Real, 16) \
+ macro(Complex, 4, Complex, 16) \
+ macro(Complex, 8, Real, 16) \
+ macro(Complex, 8, Complex, 16) \
+ macro(Complex, 16, Integer, 1) \
+ macro(Complex, 16, Integer, 2) \
+ macro(Complex, 16, Integer, 4) \
+ macro(Complex, 16, Integer, 8) \
+ macro(Complex, 16, Real, 4) \
+ macro(Complex, 16, Real, 8) \
+ macro(Complex, 16, Real, 16) \
+ macro(Complex, 16, Complex, 4) \
+ macro(Complex, 16, Complex, 8) \
+ macro(Complex, 16, Complex, 16) \
+
+FOREACH_MATMUL_TYPE_PAIR_WITH_REAL16(MATMUL_INSTANCE)
+FOREACH_MATMUL_TYPE_PAIR_WITH_REAL16(MATMUL_DIRECT_INSTANCE)
+#endif // MATMUL_FORCE_ALL_TYPES || (HAS_LDBL128 || HAS_FLOAT128)
+
+#define FOREACH_MATMUL_LOGICAL_TYPE_PAIR(macro) \
+ macro(Logical, 1, Logical, 1) \
+ macro(Logical, 1, Logical, 2) \
+ macro(Logical, 1, Logical, 4) \
+ macro(Logical, 1, Logical, 8) \
+ macro(Logical, 2, Logical, 1) \
+ macro(Logical, 2, Logical, 2) \
+ macro(Logical, 2, Logical, 4) \
+ macro(Logical, 2, Logical, 8) \
+ macro(Logical, 4, Logical, 1) \
+ macro(Logical, 4, Logical, 2) \
+ macro(Logical, 4, Logical, 4) \
+ macro(Logical, 4, Logical, 8) \
+ macro(Logical, 8, Logical, 1) \
+ macro(Logical, 8, Logical, 2) \
+ macro(Logical, 8, Logical, 4) \
+ macro(Logical, 8, Logical, 8) \
+
+FOREACH_MATMUL_LOGICAL_TYPE_PAIR(MATMUL_INSTANCE)
+FOREACH_MATMUL_LOGICAL_TYPE_PAIR(MATMUL_DIRECT_INSTANCE)
+
+#undef MATMUL_INSTANCE
+#undef MATMUL_DIRECT_INSTANCE
+#undef MATMUL_FORCE_ALL_TYPES
+
+// clang-format on
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/matmul-transpose.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/matmul-transpose.h
new file mode 100644
index 00000000000..2d79ca10e08
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/matmul-transpose.h
@@ -0,0 +1,49 @@
+//===-- include/flang/Runtime/matmul-transpose.h ----------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// API for optimised MATMUL(TRANSPOSE(a), b)
+
+#ifndef FORTRAN_RUNTIME_MATMUL_TRANSPOSE_H_
+#define FORTRAN_RUNTIME_MATMUL_TRANSPOSE_H_
+#include "flang/Common/float128.h"
+#include "flang/Common/uint128.h"
+#include "flang/Runtime/entry-names.h"
+namespace Fortran::runtime {
+class Descriptor;
+extern "C" {
+
+// The most general MATMUL(TRANSPOSE()). All type and shape information is
+// taken from the arguments' descriptors, and the result is dynamically
+// allocated.
+void RTDECL(MatmulTranspose)(Descriptor &, const Descriptor &,
+ const Descriptor &, const char *sourceFile = nullptr, int line = 0);
+
+// A non-allocating variant; the result's descriptor must be established
+// and have a valid base address.
+void RTDECL(MatmulTransposeDirect)(const Descriptor &, const Descriptor &,
+ const Descriptor &, const char *sourceFile = nullptr, int line = 0);
+
+// MATMUL(TRANSPOSE()) versions specialized by the categories of the operand
+// types. The KIND and shape information is taken from the argument's
+// descriptors.
+#define MATMUL_INSTANCE(XCAT, XKIND, YCAT, YKIND) \
+ void RTDECL(MatmulTranspose##XCAT##XKIND##YCAT##YKIND)(Descriptor & result, \
+ const Descriptor &x, const Descriptor &y, const char *sourceFile, \
+ int line);
+#define MATMUL_DIRECT_INSTANCE(XCAT, XKIND, YCAT, YKIND) \
+ void RTDECL(MatmulTransposeDirect##XCAT##XKIND##YCAT##YKIND)( \
+ Descriptor & result, const Descriptor &x, const Descriptor &y, \
+ const char *sourceFile, int line);
+
+#define MATMUL_FORCE_ALL_TYPES 0
+
+#include "matmul-instances.inc"
+
+} // extern "C"
+} // namespace Fortran::runtime
+#endif // FORTRAN_RUNTIME_MATMUL_TRANSPOSE_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/matmul.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/matmul.h
new file mode 100644
index 00000000000..a72d4a06ee4
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/matmul.h
@@ -0,0 +1,48 @@
+//===-- include/flang/Runtime/matmul.h --------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// API for the transformational intrinsic function MATMUL.
+
+#ifndef FORTRAN_RUNTIME_MATMUL_H_
+#define FORTRAN_RUNTIME_MATMUL_H_
+#include "flang/Common/float128.h"
+#include "flang/Common/uint128.h"
+#include "flang/Runtime/entry-names.h"
+namespace Fortran::runtime {
+class Descriptor;
+extern "C" {
+
+// The most general MATMUL. All type and shape information is taken from the
+// arguments' descriptors, and the result is dynamically allocated.
+void RTDECL(Matmul)(Descriptor &, const Descriptor &, const Descriptor &,
+ const char *sourceFile = nullptr, int line = 0);
+
+// A non-allocating variant; the result's descriptor must be established
+// and have a valid base address.
+void RTDECL(MatmulDirect)(const Descriptor &, const Descriptor &,
+ const Descriptor &, const char *sourceFile = nullptr, int line = 0);
+
+// MATMUL versions specialized by the categories of the operand types.
+// The KIND and shape information is taken from the argument's
+// descriptors.
+#define MATMUL_INSTANCE(XCAT, XKIND, YCAT, YKIND) \
+ void RTDECL(Matmul##XCAT##XKIND##YCAT##YKIND)(Descriptor & result, \
+ const Descriptor &x, const Descriptor &y, const char *sourceFile, \
+ int line);
+#define MATMUL_DIRECT_INSTANCE(XCAT, XKIND, YCAT, YKIND) \
+ void RTDECL(MatmulDirect##XCAT##XKIND##YCAT##YKIND)(Descriptor & result, \
+ const Descriptor &x, const Descriptor &y, const char *sourceFile, \
+ int line);
+
+#define MATMUL_FORCE_ALL_TYPES 0
+
+#include "matmul-instances.inc"
+
+} // extern "C"
+} // namespace Fortran::runtime
+#endif // FORTRAN_RUNTIME_MATMUL_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/misc-intrinsic.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/misc-intrinsic.h
new file mode 100644
index 00000000000..3fb3aaed49c
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/misc-intrinsic.h
@@ -0,0 +1,31 @@
+//===-- include/flang/Runtime/misc-intrinsic.h ------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Miscellaneous intrinsic procedures
+
+#ifndef FORTRAN_RUNTIME_MISC_INTRINSIC_H_
+#define FORTRAN_RUNTIME_MISC_INTRINSIC_H_
+
+#include "flang/Runtime/entry-names.h"
+#include <cstdint>
+
+namespace Fortran::runtime {
+
+class Descriptor;
+
+extern "C" {
+void RTDECL(Rename)(const Descriptor &path1, const Descriptor &path2,
+ const Descriptor *status, const char *sourceFile, int line);
+void RTDECL(Transfer)(Descriptor &result, const Descriptor &source,
+ const Descriptor &mold, const char *sourceFile, int line);
+void RTDECL(TransferSize)(Descriptor &result, const Descriptor &source,
+ const Descriptor &mold, const char *sourceFile, int line,
+ std::int64_t size);
+} // extern "C"
+} // namespace Fortran::runtime
+#endif // FORTRAN_RUNTIME_MISC_INTRINSIC_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/numeric.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/numeric.h
new file mode 100644
index 00000000000..794c8f47688
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/numeric.h
@@ -0,0 +1,458 @@
+//===-- include/flang/Runtime/numeric.h -------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Defines API between compiled code and the implementations of various numeric
+// intrinsic functions in the runtime library.
+
+#ifndef FORTRAN_RUNTIME_NUMERIC_H_
+#define FORTRAN_RUNTIME_NUMERIC_H_
+
+#include "flang/Common/float128.h"
+#include "flang/Runtime/cpp-type.h"
+#include "flang/Runtime/entry-names.h"
+
+namespace Fortran::runtime {
+extern "C" {
+
+// CEILING
+CppTypeFor<TypeCategory::Integer, 1> RTDECL(Ceiling4_1)(
+ CppTypeFor<TypeCategory::Real, 4>);
+CppTypeFor<TypeCategory::Integer, 2> RTDECL(Ceiling4_2)(
+ CppTypeFor<TypeCategory::Real, 4>);
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(Ceiling4_4)(
+ CppTypeFor<TypeCategory::Real, 4>);
+CppTypeFor<TypeCategory::Integer, 8> RTDECL(Ceiling4_8)(
+ CppTypeFor<TypeCategory::Real, 4>);
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDECL(Ceiling4_16)(
+ CppTypeFor<TypeCategory::Real, 4>);
+#endif
+CppTypeFor<TypeCategory::Integer, 1> RTDECL(Ceiling8_1)(
+ CppTypeFor<TypeCategory::Real, 8>);
+CppTypeFor<TypeCategory::Integer, 2> RTDECL(Ceiling8_2)(
+ CppTypeFor<TypeCategory::Real, 8>);
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(Ceiling8_4)(
+ CppTypeFor<TypeCategory::Real, 8>);
+CppTypeFor<TypeCategory::Integer, 8> RTDECL(Ceiling8_8)(
+ CppTypeFor<TypeCategory::Real, 8>);
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDECL(Ceiling8_16)(
+ CppTypeFor<TypeCategory::Real, 8>);
+#endif
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Integer, 1> RTDECL(Ceiling10_1)(
+ CppTypeFor<TypeCategory::Real, 10>);
+CppTypeFor<TypeCategory::Integer, 2> RTDECL(Ceiling10_2)(
+ CppTypeFor<TypeCategory::Real, 10>);
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(Ceiling10_4)(
+ CppTypeFor<TypeCategory::Real, 10>);
+CppTypeFor<TypeCategory::Integer, 8> RTDECL(Ceiling10_8)(
+ CppTypeFor<TypeCategory::Real, 10>);
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDECL(Ceiling10_16)(
+ CppTypeFor<TypeCategory::Real, 10>);
+#endif
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppTypeFor<TypeCategory::Integer, 1> RTDECL(Ceiling16_1)(
+ CppTypeFor<TypeCategory::Real, 16>);
+CppTypeFor<TypeCategory::Integer, 2> RTDECL(Ceiling16_2)(
+ CppTypeFor<TypeCategory::Real, 16>);
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(Ceiling16_4)(
+ CppTypeFor<TypeCategory::Real, 16>);
+CppTypeFor<TypeCategory::Integer, 8> RTDECL(Ceiling16_8)(
+ CppTypeFor<TypeCategory::Real, 16>);
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDECL(Ceiling16_16)(
+ CppTypeFor<TypeCategory::Real, 16>);
+#endif
+#endif
+
+// ERFC_SCALED
+CppTypeFor<TypeCategory::Real, 4> RTDECL(ErfcScaled4)(
+ CppTypeFor<TypeCategory::Real, 4>);
+CppTypeFor<TypeCategory::Real, 8> RTDECL(ErfcScaled8)(
+ CppTypeFor<TypeCategory::Real, 8>);
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDECL(ErfcScaled10)(
+ CppTypeFor<TypeCategory::Real, 10>);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppTypeFor<TypeCategory::Real, 16> RTDECL(ErfcScaled16)(
+ CppTypeFor<TypeCategory::Real, 16>);
+#endif
+
+// EXPONENT is defined to return default INTEGER; support INTEGER(4 & 8)
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(Exponent4_4)(
+ CppTypeFor<TypeCategory::Real, 4>);
+CppTypeFor<TypeCategory::Integer, 8> RTDECL(Exponent4_8)(
+ CppTypeFor<TypeCategory::Real, 4>);
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(Exponent8_4)(
+ CppTypeFor<TypeCategory::Real, 8>);
+CppTypeFor<TypeCategory::Integer, 8> RTDECL(Exponent8_8)(
+ CppTypeFor<TypeCategory::Real, 8>);
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(Exponent10_4)(
+ CppTypeFor<TypeCategory::Real, 10>);
+CppTypeFor<TypeCategory::Integer, 8> RTDECL(Exponent10_8)(
+ CppTypeFor<TypeCategory::Real, 10>);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(Exponent16_4)(
+ CppTypeFor<TypeCategory::Real, 16>);
+CppTypeFor<TypeCategory::Integer, 8> RTDECL(Exponent16_8)(
+ CppTypeFor<TypeCategory::Real, 16>);
+#endif
+
+// FLOOR
+CppTypeFor<TypeCategory::Integer, 1> RTDECL(Floor4_1)(
+ CppTypeFor<TypeCategory::Real, 4>);
+CppTypeFor<TypeCategory::Integer, 2> RTDECL(Floor4_2)(
+ CppTypeFor<TypeCategory::Real, 4>);
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(Floor4_4)(
+ CppTypeFor<TypeCategory::Real, 4>);
+CppTypeFor<TypeCategory::Integer, 8> RTDECL(Floor4_8)(
+ CppTypeFor<TypeCategory::Real, 4>);
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDECL(Floor4_16)(
+ CppTypeFor<TypeCategory::Real, 4>);
+#endif
+CppTypeFor<TypeCategory::Integer, 1> RTDECL(Floor8_1)(
+ CppTypeFor<TypeCategory::Real, 8>);
+CppTypeFor<TypeCategory::Integer, 2> RTDECL(Floor8_2)(
+ CppTypeFor<TypeCategory::Real, 8>);
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(Floor8_4)(
+ CppTypeFor<TypeCategory::Real, 8>);
+CppTypeFor<TypeCategory::Integer, 8> RTDECL(Floor8_8)(
+ CppTypeFor<TypeCategory::Real, 8>);
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDECL(Floor8_16)(
+ CppTypeFor<TypeCategory::Real, 8>);
+#endif
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Integer, 1> RTDECL(Floor10_1)(
+ CppTypeFor<TypeCategory::Real, 10>);
+CppTypeFor<TypeCategory::Integer, 2> RTDECL(Floor10_2)(
+ CppTypeFor<TypeCategory::Real, 10>);
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(Floor10_4)(
+ CppTypeFor<TypeCategory::Real, 10>);
+CppTypeFor<TypeCategory::Integer, 8> RTDECL(Floor10_8)(
+ CppTypeFor<TypeCategory::Real, 10>);
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDECL(Floor10_16)(
+ CppTypeFor<TypeCategory::Real, 10>);
+#endif
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppTypeFor<TypeCategory::Integer, 1> RTDECL(Floor16_1)(
+ CppTypeFor<TypeCategory::Real, 16>);
+CppTypeFor<TypeCategory::Integer, 2> RTDECL(Floor16_2)(
+ CppTypeFor<TypeCategory::Real, 16>);
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(Floor16_4)(
+ CppTypeFor<TypeCategory::Real, 16>);
+CppTypeFor<TypeCategory::Integer, 8> RTDECL(Floor16_8)(
+ CppTypeFor<TypeCategory::Real, 16>);
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDECL(Floor16_16)(
+ CppTypeFor<TypeCategory::Real, 16>);
+#endif
+#endif
+
+// FRACTION
+CppTypeFor<TypeCategory::Real, 4> RTDECL(Fraction4)(
+ CppTypeFor<TypeCategory::Real, 4>);
+CppTypeFor<TypeCategory::Real, 8> RTDECL(Fraction8)(
+ CppTypeFor<TypeCategory::Real, 8>);
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDECL(Fraction10)(
+ CppTypeFor<TypeCategory::Real, 10>);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppTypeFor<TypeCategory::Real, 16> RTDECL(Fraction16)(
+ CppTypeFor<TypeCategory::Real, 16>);
+#endif
+
+// ISNAN / IEEE_IS_NAN
+bool RTDECL(IsNaN4)(CppTypeFor<TypeCategory::Real, 4>);
+bool RTDECL(IsNaN8)(CppTypeFor<TypeCategory::Real, 8>);
+#if HAS_FLOAT80
+bool RTDECL(IsNaN10)(CppTypeFor<TypeCategory::Real, 10>);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+bool RTDECL(IsNaN16)(CppTypeFor<TypeCategory::Real, 16>);
+#endif
+
+// MOD & MODULO
+CppTypeFor<TypeCategory::Integer, 1> RTDECL(ModInteger1)(
+ CppTypeFor<TypeCategory::Integer, 1>, CppTypeFor<TypeCategory::Integer, 1>,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+CppTypeFor<TypeCategory::Integer, 2> RTDECL(ModInteger2)(
+ CppTypeFor<TypeCategory::Integer, 2>, CppTypeFor<TypeCategory::Integer, 2>,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(ModInteger4)(
+ CppTypeFor<TypeCategory::Integer, 4>, CppTypeFor<TypeCategory::Integer, 4>,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+CppTypeFor<TypeCategory::Integer, 8> RTDECL(ModInteger8)(
+ CppTypeFor<TypeCategory::Integer, 8>, CppTypeFor<TypeCategory::Integer, 8>,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDECL(ModInteger16)(
+ CppTypeFor<TypeCategory::Integer, 16>,
+ CppTypeFor<TypeCategory::Integer, 16>, const char *sourceFile = nullptr,
+ int sourceLine = 0);
+#endif
+CppTypeFor<TypeCategory::Real, 4> RTDECL(ModReal4)(
+ CppTypeFor<TypeCategory::Real, 4>, CppTypeFor<TypeCategory::Real, 4>,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+CppTypeFor<TypeCategory::Real, 8> RTDECL(ModReal8)(
+ CppTypeFor<TypeCategory::Real, 8>, CppTypeFor<TypeCategory::Real, 8>,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDECL(ModReal10)(
+ CppTypeFor<TypeCategory::Real, 10>, CppTypeFor<TypeCategory::Real, 10>,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppTypeFor<TypeCategory::Real, 16> RTDECL(ModReal16)(
+ CppTypeFor<TypeCategory::Real, 16>, CppTypeFor<TypeCategory::Real, 16>,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+#endif
+
+CppTypeFor<TypeCategory::Integer, 1> RTDECL(ModuloInteger1)(
+ CppTypeFor<TypeCategory::Integer, 1>, CppTypeFor<TypeCategory::Integer, 1>,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+CppTypeFor<TypeCategory::Integer, 2> RTDECL(ModuloInteger2)(
+ CppTypeFor<TypeCategory::Integer, 2>, CppTypeFor<TypeCategory::Integer, 2>,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(ModuloInteger4)(
+ CppTypeFor<TypeCategory::Integer, 4>, CppTypeFor<TypeCategory::Integer, 4>,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+CppTypeFor<TypeCategory::Integer, 8> RTDECL(ModuloInteger8)(
+ CppTypeFor<TypeCategory::Integer, 8>, CppTypeFor<TypeCategory::Integer, 8>,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDECL(ModuloInteger16)(
+ CppTypeFor<TypeCategory::Integer, 16>,
+ CppTypeFor<TypeCategory::Integer, 16>, const char *sourceFile = nullptr,
+ int sourceLine = 0);
+#endif
+CppTypeFor<TypeCategory::Real, 4> RTDECL(ModuloReal4)(
+ CppTypeFor<TypeCategory::Real, 4>, CppTypeFor<TypeCategory::Real, 4>,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+CppTypeFor<TypeCategory::Real, 8> RTDECL(ModuloReal8)(
+ CppTypeFor<TypeCategory::Real, 8>, CppTypeFor<TypeCategory::Real, 8>,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDECL(ModuloReal10)(
+ CppTypeFor<TypeCategory::Real, 10>, CppTypeFor<TypeCategory::Real, 10>,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppTypeFor<TypeCategory::Real, 16> RTDECL(ModuloReal16)(
+ CppTypeFor<TypeCategory::Real, 16>, CppTypeFor<TypeCategory::Real, 16>,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+#endif
+
+// NINT
+CppTypeFor<TypeCategory::Integer, 1> RTDECL(Nint4_1)(
+ CppTypeFor<TypeCategory::Real, 4>);
+CppTypeFor<TypeCategory::Integer, 2> RTDECL(Nint4_2)(
+ CppTypeFor<TypeCategory::Real, 4>);
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(Nint4_4)(
+ CppTypeFor<TypeCategory::Real, 4>);
+CppTypeFor<TypeCategory::Integer, 8> RTDECL(Nint4_8)(
+ CppTypeFor<TypeCategory::Real, 4>);
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDECL(Nint4_16)(
+ CppTypeFor<TypeCategory::Real, 4>);
+#endif
+CppTypeFor<TypeCategory::Integer, 1> RTDECL(Nint8_1)(
+ CppTypeFor<TypeCategory::Real, 8>);
+CppTypeFor<TypeCategory::Integer, 2> RTDECL(Nint8_2)(
+ CppTypeFor<TypeCategory::Real, 8>);
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(Nint8_4)(
+ CppTypeFor<TypeCategory::Real, 8>);
+CppTypeFor<TypeCategory::Integer, 8> RTDECL(Nint8_8)(
+ CppTypeFor<TypeCategory::Real, 8>);
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDECL(Nint8_16)(
+ CppTypeFor<TypeCategory::Real, 8>);
+#endif
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Integer, 1> RTDECL(Nint10_1)(
+ CppTypeFor<TypeCategory::Real, 10>);
+CppTypeFor<TypeCategory::Integer, 2> RTDECL(Nint10_2)(
+ CppTypeFor<TypeCategory::Real, 10>);
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(Nint10_4)(
+ CppTypeFor<TypeCategory::Real, 10>);
+CppTypeFor<TypeCategory::Integer, 8> RTDECL(Nint10_8)(
+ CppTypeFor<TypeCategory::Real, 10>);
+#ifdef __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDECL(Nint10_16)(
+ CppTypeFor<TypeCategory::Real, 10>);
+#endif
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppTypeFor<TypeCategory::Integer, 1> RTDECL(Nint16_1)(
+ CppTypeFor<TypeCategory::Real, 16>);
+CppTypeFor<TypeCategory::Integer, 2> RTDECL(Nint16_2)(
+ CppTypeFor<TypeCategory::Real, 16>);
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(Nint16_4)(
+ CppTypeFor<TypeCategory::Real, 16>);
+CppTypeFor<TypeCategory::Integer, 8> RTDECL(Nint16_8)(
+ CppTypeFor<TypeCategory::Real, 16>);
+#if defined __SIZEOF_INT128__
+CppTypeFor<TypeCategory::Integer, 16> RTDECL(Nint16_16)(
+ CppTypeFor<TypeCategory::Real, 16>);
+#endif
+#endif
+
+// NEAREST
+// The second argument to NEAREST is the result of a comparison
+// to zero (i.e., S > 0)
+CppTypeFor<TypeCategory::Real, 4> RTDECL(Nearest4)(
+ CppTypeFor<TypeCategory::Real, 4>, bool positive);
+CppTypeFor<TypeCategory::Real, 8> RTDECL(Nearest8)(
+ CppTypeFor<TypeCategory::Real, 8>, bool positive);
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDECL(Nearest10)(
+ CppTypeFor<TypeCategory::Real, 10>, bool positive);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppTypeFor<TypeCategory::Real, 16> RTDECL(Nearest16)(
+ CppTypeFor<TypeCategory::Real, 16>, bool positive);
+#endif
+
+// RRSPACING
+CppTypeFor<TypeCategory::Real, 4> RTDECL(RRSpacing4)(
+ CppTypeFor<TypeCategory::Real, 4>);
+CppTypeFor<TypeCategory::Real, 8> RTDECL(RRSpacing8)(
+ CppTypeFor<TypeCategory::Real, 8>);
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDECL(RRSpacing10)(
+ CppTypeFor<TypeCategory::Real, 10>);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppTypeFor<TypeCategory::Real, 16> RTDECL(RRSpacing16)(
+ CppTypeFor<TypeCategory::Real, 16>);
+#endif
+
+// SET_EXPONENT's I= argument can be any INTEGER kind; upcast it to 64-bit
+CppTypeFor<TypeCategory::Real, 4> RTDECL(SetExponent4)(
+ CppTypeFor<TypeCategory::Real, 4>, std::int64_t);
+CppTypeFor<TypeCategory::Real, 8> RTDECL(SetExponent8)(
+ CppTypeFor<TypeCategory::Real, 8>, std::int64_t);
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDECL(SetExponent10)(
+ CppTypeFor<TypeCategory::Real, 10>, std::int64_t);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppTypeFor<TypeCategory::Real, 16> RTDECL(SetExponent16)(
+ CppTypeFor<TypeCategory::Real, 16>, std::int64_t);
+#endif
+
+// SCALE
+CppTypeFor<TypeCategory::Real, 4> RTDECL(Scale4)(
+ CppTypeFor<TypeCategory::Real, 4>, std::int64_t);
+CppTypeFor<TypeCategory::Real, 8> RTDECL(Scale8)(
+ CppTypeFor<TypeCategory::Real, 8>, std::int64_t);
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDECL(Scale10)(
+ CppTypeFor<TypeCategory::Real, 10>, std::int64_t);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppTypeFor<TypeCategory::Real, 16> RTDECL(Scale16)(
+ CppTypeFor<TypeCategory::Real, 16>, std::int64_t);
+#endif
+
+// SELECTED_CHAR_KIND
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(SelectedCharKind)(
+ const char *, int, const char *, std::size_t);
+
+// SELECTED_INT_KIND and SELECTED_UNSIGNED_KIND
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(SelectedIntKind)(
+ const char *, int, void *, int);
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(SelectedIntKindMasked)(
+ const char *, int, void *, int, int);
+
+// SELECTED_LOGICAL_KIND
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(SelectedLogicalKind)(
+ const char *, int, void *, int);
+
+// SELECTED_REAL_KIND
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(SelectedRealKind)(
+ const char *, int, void *, int, void *, int, void *, int);
+CppTypeFor<TypeCategory::Integer, 4> RTDECL(SelectedRealKindMasked)(
+ const char *, int, void *, int, void *, int, void *, int, int);
+
+// SPACING
+// The variants Spacing2By4 and Spacing3By4 compute SPACING for REAL(2/3)
+// but accept and return REAL(4) values, for use in environments where
+// std::float16_t or std::bfloat16_t are unavailable.
+#if HAS_FP16
+CppTypeFor<TypeCategory::Real, 2> RTDECL(Spacing2)(
+ CppTypeFor<TypeCategory::Real, 2>);
+#endif
+CppTypeFor<TypeCategory::Real, 4> RTDECL(Spacing2By4)(
+ CppTypeFor<TypeCategory::Real, 4>);
+#if HAS_BF16
+CppTypeFor<TypeCategory::Real, 3> RTDECL(Spacing3)(
+ CppTypeFor<TypeCategory::Real, 3>);
+#endif
+CppTypeFor<TypeCategory::Real, 4> RTDECL(Spacing3By4)(
+ CppTypeFor<TypeCategory::Real, 4>);
+CppTypeFor<TypeCategory::Real, 4> RTDECL(Spacing4)(
+ CppTypeFor<TypeCategory::Real, 4>);
+CppTypeFor<TypeCategory::Real, 8> RTDECL(Spacing8)(
+ CppTypeFor<TypeCategory::Real, 8>);
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDECL(Spacing10)(
+ CppTypeFor<TypeCategory::Real, 10>);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppTypeFor<TypeCategory::Real, 16> RTDECL(Spacing16)(
+ CppTypeFor<TypeCategory::Real, 16>);
+#endif
+
+CppTypeFor<TypeCategory::Real, 4> RTDECL(FPow4i)(
+ CppTypeFor<TypeCategory::Real, 4> b,
+ CppTypeFor<TypeCategory::Integer, 4> e);
+CppTypeFor<TypeCategory::Real, 8> RTDECL(FPow8i)(
+ CppTypeFor<TypeCategory::Real, 8> b,
+ CppTypeFor<TypeCategory::Integer, 4> e);
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDECL(FPow10i)(
+ CppTypeFor<TypeCategory::Real, 10> b,
+ CppTypeFor<TypeCategory::Integer, 4> e);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppTypeFor<TypeCategory::Real, 16> RTDECL(FPow16i)(
+ CppTypeFor<TypeCategory::Real, 16> b,
+ CppTypeFor<TypeCategory::Integer, 4> e);
+#endif
+
+CppTypeFor<TypeCategory::Real, 4> RTDECL(FPow4k)(
+ CppTypeFor<TypeCategory::Real, 4> b,
+ CppTypeFor<TypeCategory::Integer, 8> e);
+CppTypeFor<TypeCategory::Real, 8> RTDECL(FPow8k)(
+ CppTypeFor<TypeCategory::Real, 8> b,
+ CppTypeFor<TypeCategory::Integer, 8> e);
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDECL(FPow10k)(
+ CppTypeFor<TypeCategory::Real, 10> b,
+ CppTypeFor<TypeCategory::Integer, 8> e);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppTypeFor<TypeCategory::Real, 16> RTDECL(FPow16k)(
+ CppTypeFor<TypeCategory::Real, 16> b,
+ CppTypeFor<TypeCategory::Integer, 8> e);
+#endif
+
+} // extern "C"
+} // namespace Fortran::runtime
+#endif // FORTRAN_RUNTIME_NUMERIC_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/pointer.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/pointer.h
new file mode 100644
index 00000000000..83472ee59d2
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/pointer.h
@@ -0,0 +1,126 @@
+//===-- include/flang/Runtime/pointer.h -------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Defines APIs for Fortran runtime library support of code generated
+// to manipulate and query data pointers.
+
+#ifndef FORTRAN_RUNTIME_POINTER_H_
+#define FORTRAN_RUNTIME_POINTER_H_
+
+#include "flang/Runtime/descriptor-consts.h"
+#include "flang/Runtime/entry-names.h"
+
+namespace Fortran::runtime {
+extern "C" {
+
+// Data pointer initialization for NULLIFY(), "p=>NULL()`, & for ALLOCATE().
+
+// Initializes a pointer to a disassociated state for NULLIFY() or "p=>NULL()".
+void RTDECL(PointerNullifyIntrinsic)(
+ Descriptor &, TypeCategory, int kind, int rank = 0, int corank = 0);
+void RTDECL(PointerNullifyCharacter)(Descriptor &, SubscriptValue length = 0,
+ int kind = 1, int rank = 0, int corank = 0);
+void RTDECL(PointerNullifyDerived)(
+ Descriptor &, const typeInfo::DerivedType &, int rank = 0, int corank = 0);
+
+// Explicitly sets the bounds of an initialized disassociated pointer.
+// The upper cobound is ignored for the last codimension.
+void RTDECL(PointerSetBounds)(
+ Descriptor &, int zeroBasedDim, SubscriptValue lower, SubscriptValue upper);
+void RTDECL(PointerSetCoBounds)(Descriptor &, int zeroBasedCoDim,
+ SubscriptValue lower, SubscriptValue upper = 0);
+
+// Length type parameters are indexed in declaration order; i.e., 0 is the
+// first length type parameter in the deepest base type. (Not for use
+// with CHARACTER; see above.)
+void RTDECL(PointerSetDerivedLength)(Descriptor &, int which, SubscriptValue);
+
+// For MOLD= allocation: acquires information from another descriptor
+// to initialize a null data pointer.
+void RTDECL(PointerApplyMold)(
+ Descriptor &, const Descriptor &mold, int rank = 0);
+
+// Data pointer association for "p=>TARGET"
+
+// Associates a scalar pointer with a simple scalar target.
+void RTDECL(PointerAssociateScalar)(Descriptor &, void *);
+
+// Associates a pointer with a target of the same rank, possibly with new lower
+// bounds, which are passed in a vector whose length must equal the rank.
+void RTDECL(PointerAssociate)(Descriptor &, const Descriptor &target);
+void RTDECL(PointerAssociateLowerBounds)(
+ Descriptor &, const Descriptor &target, const Descriptor &lowerBounds);
+
+// Associates a pointer with a target with bounds remapping. The target must be
+// simply contiguous &/or of rank 1. The bounds constitute a [2,newRank]
+// integer array whose columns are [lower bound, upper bound] on each dimension.
+void RTDECL(PointerAssociateRemapping)(Descriptor &, const Descriptor &target,
+ const Descriptor &bounds, const char *sourceFile = nullptr,
+ int sourceLine = 0);
+
+// Data pointer allocation and deallocation
+
+// When an explicit type-spec appears in an ALLOCATE statement for an
+// pointer with an explicit (non-deferred) length type paramater for
+// a derived type or CHARACTER value, the explicit value has to match
+// the length type parameter's value. This API checks that requirement.
+// Returns 0 for success, or the STAT= value on failure with hasStat==true.
+int RTDECL(PointerCheckLengthParameter)(Descriptor &,
+ int which /* 0 for CHARACTER length */, SubscriptValue other,
+ bool hasStat = false, const Descriptor *errMsg = nullptr,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+
+// Allocates a data pointer. Its descriptor must have been initialized
+// and its bounds and length type parameters set. It need not be disassociated.
+// On failure, if hasStat is true, returns a nonzero error code for
+// STAT= and (if present) fills in errMsg; if hasStat is false, the
+// image is terminated. On success, leaves errMsg alone and returns zero.
+// Successfully allocated memory is initialized if the pointer has a
+// derived type, and is always initialized by PointerAllocateSource().
+// Performs all necessary coarray synchronization and validation actions.
+int RTDECL(PointerAllocate)(Descriptor &, bool hasStat = false,
+ const Descriptor *errMsg = nullptr, const char *sourceFile = nullptr,
+ int sourceLine = 0);
+int RTDECL(PointerAllocateSource)(Descriptor &, const Descriptor &source,
+ bool hasStat = false, const Descriptor *errMsg = nullptr,
+ const char *sourceFile = nullptr, int sourceLine = 0);
+
+// Deallocates a data pointer, which must have been allocated by
+// PointerAllocate(), possibly copied with PointerAssociate().
+// Finalizes elements &/or components as needed. The pointer is left
+// in an initialized disassociated state suitable for reallocation
+// with the same bounds, cobounds, and length type parameters.
+int RTDECL(PointerDeallocate)(Descriptor &, bool hasStat = false,
+ const Descriptor *errMsg = nullptr, const char *sourceFile = nullptr,
+ int sourceLine = 0);
+
+// Same as PointerDeallocate but also set the dynamic type as the declared type
+// as mentioned in 7.3.2.3 note 7.
+int RTDECL(PointerDeallocatePolymorphic)(Descriptor &,
+ const typeInfo::DerivedType *, bool hasStat = false,
+ const Descriptor *errMsg = nullptr, const char *sourceFile = nullptr,
+ int sourceLine = 0);
+
+// Association inquiries for ASSOCIATED()
+
+// True when the pointer is not disassociated.
+bool RTDECL(PointerIsAssociated)(const Descriptor &);
+
+// True when the pointer is associated with a specific target.
+bool RTDECL(PointerIsAssociatedWith)(
+ const Descriptor &, const Descriptor *target);
+
+// Fortran POINTERs are allocated with an extra validation word after their
+// payloads in order to detect erroneous deallocations later.
+RT_API_ATTRS void *AllocateValidatedPointerPayload(
+ std::size_t, int allocatorIdx = 0);
+RT_API_ATTRS bool ValidatePointerPayload(const ISO::CFI_cdesc_t &);
+
+} // extern "C"
+} // namespace Fortran::runtime
+#endif // FORTRAN_RUNTIME_POINTER_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/ragged.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/ragged.h
new file mode 100644
index 00000000000..f52a619c55b
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/ragged.h
@@ -0,0 +1,60 @@
+//===-- Runtime/ragged.h ----------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_RUNTIME_RAGGED_H_
+#define FORTRAN_RUNTIME_RAGGED_H_
+
+#include "flang/Runtime/entry-names.h"
+#include <cstdint>
+
+namespace Fortran::runtime {
+
+// A ragged array header block.
+// The header block is used to create the "array of arrays" ragged data
+// structure. It contains a pair in `flags` to indicate if the header points to
+// an array of headers (isIndirection) or data elements and the rank of the
+// pointed-to array. The rank is the length of the extents vector accessed
+// through `extentPointer`. The `bufferPointer` is overloaded
+// and is null, points to an array of headers (isIndirection), or data.
+// By default, a header is set to zero, which is its unused state.
+// The layout of a ragged buffer header is mirrored in the compiler.
+struct RaggedArrayHeader {
+ std::uint64_t flags;
+ void *bufferPointer;
+ std::int64_t *extentPointer;
+};
+
+extern "C" {
+
+// For more on ragged arrays see https://en.wikipedia.org/wiki/Jagged_array. The
+// Flang compiler allocates ragged arrays as a generalization for
+// non-rectangular array temporaries. Ragged arrays can be allocated recursively
+// and on demand. Structurally, each leaf is an optional rectangular array of
+// elements. The shape of each leaf is independent and may be computed on
+// demand. Each branch node is an optional, possibly sparse rectangular array of
+// headers. The shape of each branch is independent and may be computed on
+// demand. Ragged arrays preserve a correspondence between a multidimensional
+// iteration space and array access vectors, which is helpful for dependence
+// analysis.
+
+// Runtime helper for allocation of ragged array buffers.
+// A pointer to the header block to be allocated is given as header. The flag
+// isHeader indicates if a block of headers or data is to be allocated. A
+// non-negative rank indicates the length of the extentVector, which is a list
+// of non-negative extents. elementSize is the size of a data element in the
+// rectangular space defined by the extentVector.
+void *RTDECL(RaggedArrayAllocate)(void *header, bool isHeader,
+ std::int64_t rank, std::int64_t elementSize, std::int64_t *extentVector);
+
+// Runtime helper for deallocation of ragged array buffers. The root header of
+// the ragged array structure is passed to deallocate the entire ragged array.
+void RTDECL(RaggedArrayDeallocate)(void *raggedArrayHeader);
+
+} // extern "C"
+} // namespace Fortran::runtime
+#endif // FORTRAN_RUNTIME_RAGGED_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/random.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/random.h
new file mode 100644
index 00000000000..1f01be1aa9f
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/random.h
@@ -0,0 +1,42 @@
+//===-- include/flang/Runtime/random.h --------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Intrinsic subroutines RANDOM_INIT, RANDOM_NUMBER, and RANDOM_SEED.
+
+#ifndef FORTRAN_RUNTIME_RANDOM_H_
+#define FORTRAN_RUNTIME_RANDOM_H_
+
+#include "flang/Runtime/entry-names.h"
+#include <cstdint>
+
+namespace Fortran::runtime {
+class Descriptor;
+extern "C" {
+
+void RTNAME(RandomInit)(bool repeatable, bool image_distinct);
+
+void RTNAME(RandomNumber)(
+ const Descriptor &harvest, const char *source, int line);
+
+// RANDOM_SEED may be called with a value for at most one of its three
+// optional arguments. Most calls map to an entry point for that value,
+// or the entry point for no values. If argument presence cannot be
+// determined at compile time, function RandomSeed can be called to make
+// the selection at run time.
+void RTNAME(RandomSeedSize)(
+ const Descriptor *size, const char *source, int line);
+void RTNAME(RandomSeedPut)(const Descriptor *put, const char *source, int line);
+void RTNAME(RandomSeedGet)(const Descriptor *get, const char *source, int line);
+void RTNAME(RandomSeedDefaultPut)();
+void RTNAME(RandomSeed)(const Descriptor *size, const Descriptor *put,
+ const Descriptor *get, const char *source, int line);
+
+} // extern "C"
+} // namespace Fortran::runtime
+
+#endif // FORTRAN_RUNTIME_RANDOM_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/reduce.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/reduce.h
new file mode 100644
index 00000000000..26a61be455b
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/reduce.h
@@ -0,0 +1,565 @@
+//===-- include/flang/Runtime/reduce.h --------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Defines the API for implementations of the transformational intrinsic
+// function REDUCE(); see F'2023 16.9.173.
+//
+// Similar to the definition of the APIs for SUM(), &c., in reduction.h,
+// there are typed functions here like ReduceInteger4() for total reductions
+// to scalars and void functions like ReduceInteger4Dim() for partial
+// reductions to smaller arrays.
+
+#ifndef FORTRAN_RUNTIME_REDUCE_H_
+#define FORTRAN_RUNTIME_REDUCE_H_
+
+#include "flang/Common/float128.h"
+#include "flang/Common/uint128.h"
+#include "flang/Runtime/cpp-type.h"
+#include "flang/Runtime/entry-names.h"
+#include <complex>
+#include <cstdint>
+
+namespace Fortran::runtime {
+
+class Descriptor;
+
+template <typename T>
+using ReferenceReductionOperation = T (*)(const T *, const T *);
+template <typename T> using ValueReductionOperation = T (*)(T, T);
+template <typename CHAR>
+using ReductionCharOperation = void (*)(CHAR *hiddenResult,
+ std::size_t resultLen, const CHAR *x, const CHAR *y, std::size_t xLen,
+ std::size_t yLen);
+using ReductionDerivedTypeOperation = void (*)(
+ void *hiddenResult, const void *x, const void *y);
+
+extern "C" {
+
+std::int8_t RTDECL(ReduceInteger1Ref)(const Descriptor &,
+ ReferenceReductionOperation<std::int8_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::int8_t *identity = nullptr, bool ordered = true);
+std::int8_t RTDECL(ReduceInteger1Value)(const Descriptor &,
+ ValueReductionOperation<std::int8_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::int8_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceInteger1DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::int8_t>, const char *source, int line,
+ int dim, const Descriptor *mask = nullptr,
+ const std::int8_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceInteger1DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<std::int8_t>, const char *source, int line, int dim,
+ const Descriptor *mask = nullptr, const std::int8_t *identity = nullptr,
+ bool ordered = true);
+std::int16_t RTDECL(ReduceInteger2Ref)(const Descriptor &,
+ ReferenceReductionOperation<std::int16_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::int16_t *identity = nullptr, bool ordered = true);
+std::int16_t RTDECL(ReduceInteger2Value)(const Descriptor &,
+ ValueReductionOperation<std::int16_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::int16_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceInteger2DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::int16_t>, const char *source, int line,
+ int dim, const Descriptor *mask = nullptr,
+ const std::int16_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceInteger2DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<std::int16_t>, const char *source, int line,
+ int dim, const Descriptor *mask = nullptr,
+ const std::int16_t *identity = nullptr, bool ordered = true);
+std::int32_t RTDECL(ReduceInteger4Ref)(const Descriptor &,
+ ReferenceReductionOperation<std::int32_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::int32_t *identity = nullptr, bool ordered = true);
+std::int32_t RTDECL(ReduceInteger4Value)(const Descriptor &,
+ ValueReductionOperation<std::int32_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::int32_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceInteger4DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::int32_t>, const char *source, int line,
+ int dim, const Descriptor *mask = nullptr,
+ const std::int32_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceInteger4DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<std::int32_t>, const char *source, int line,
+ int dim, const Descriptor *mask = nullptr,
+ const std::int32_t *identity = nullptr, bool ordered = true);
+std::int64_t RTDECL(ReduceInteger8Ref)(const Descriptor &,
+ ReferenceReductionOperation<std::int64_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::int64_t *identity = nullptr, bool ordered = true);
+std::int64_t RTDECL(ReduceInteger8Value)(const Descriptor &,
+ ValueReductionOperation<std::int64_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::int64_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceInteger8DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::int64_t>, const char *source, int line,
+ int dim, const Descriptor *mask = nullptr,
+ const std::int64_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceInteger8DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<std::int64_t>, const char *source, int line,
+ int dim, const Descriptor *mask = nullptr,
+ const std::int64_t *identity = nullptr, bool ordered = true);
+#ifdef __SIZEOF_INT128__
+common::int128_t RTDECL(ReduceInteger16Ref)(const Descriptor &,
+ ReferenceReductionOperation<common::int128_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const common::int128_t *identity = nullptr, bool ordered = true);
+common::int128_t RTDECL(ReduceInteger16Value)(const Descriptor &,
+ ValueReductionOperation<common::int128_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const common::int128_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceInteger16DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<common::int128_t>, const char *source, int line,
+ int dim, const Descriptor *mask = nullptr,
+ const common::int128_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceInteger16DimValue)(Descriptor &result,
+ const Descriptor &array, ValueReductionOperation<common::int128_t>,
+ const char *source, int line, int dim, const Descriptor *mask = nullptr,
+ const common::int128_t *identity = nullptr, bool ordered = true);
+#endif
+
+std::uint8_t RTDECL(ReduceUnsigned1Ref)(const Descriptor &,
+ ReferenceReductionOperation<std::uint8_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::uint8_t *identity = nullptr, bool ordered = true);
+std::uint8_t RTDECL(ReduceUnsigned1Value)(const Descriptor &,
+ ValueReductionOperation<std::uint8_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::uint8_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceUnsigned1DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::uint8_t>, const char *source, int line,
+ int dim, const Descriptor *mask = nullptr,
+ const std::uint8_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceUnsigned1DimValue)(Descriptor &result,
+ const Descriptor &array, ValueReductionOperation<std::uint8_t>,
+ const char *source, int line, int dim, const Descriptor *mask = nullptr,
+ const std::uint8_t *identity = nullptr, bool ordered = true);
+std::uint16_t RTDECL(ReduceUnsigned2Ref)(const Descriptor &,
+ ReferenceReductionOperation<std::uint16_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::uint16_t *identity = nullptr, bool ordered = true);
+std::uint16_t RTDECL(ReduceUnsigned2Value)(const Descriptor &,
+ ValueReductionOperation<std::uint16_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::uint16_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceUnsigned2DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::uint16_t>, const char *source, int line,
+ int dim, const Descriptor *mask = nullptr,
+ const std::uint16_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceUnsigned2DimValue)(Descriptor &result,
+ const Descriptor &array, ValueReductionOperation<std::uint16_t>,
+ const char *source, int line, int dim, const Descriptor *mask = nullptr,
+ const std::uint16_t *identity = nullptr, bool ordered = true);
+std::uint32_t RTDECL(ReduceUnsigned4Ref)(const Descriptor &,
+ ReferenceReductionOperation<std::uint32_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::uint32_t *identity = nullptr, bool ordered = true);
+std::uint32_t RTDECL(ReduceUnsigned4Value)(const Descriptor &,
+ ValueReductionOperation<std::uint32_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::uint32_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceUnsigned4DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::uint32_t>, const char *source, int line,
+ int dim, const Descriptor *mask = nullptr,
+ const std::uint32_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceUnsigned4DimValue)(Descriptor &result,
+ const Descriptor &array, ValueReductionOperation<std::uint32_t>,
+ const char *source, int line, int dim, const Descriptor *mask = nullptr,
+ const std::uint32_t *identity = nullptr, bool ordered = true);
+std::uint64_t RTDECL(ReduceUnsigned8Ref)(const Descriptor &,
+ ReferenceReductionOperation<std::uint64_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::uint64_t *identity = nullptr, bool ordered = true);
+std::uint64_t RTDECL(ReduceUnsigned8Value)(const Descriptor &,
+ ValueReductionOperation<std::uint64_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::uint64_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceUnsigned8DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::uint64_t>, const char *source, int line,
+ int dim, const Descriptor *mask = nullptr,
+ const std::uint64_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceUnsigned8DimValue)(Descriptor &result,
+ const Descriptor &array, ValueReductionOperation<std::uint64_t>,
+ const char *source, int line, int dim, const Descriptor *mask = nullptr,
+ const std::uint64_t *identity = nullptr, bool ordered = true);
+#ifdef __SIZEOF_INT128__
+common::uint128_t RTDECL(ReduceUnsigned16Ref)(const Descriptor &,
+ ReferenceReductionOperation<common::uint128_t>, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr,
+ const common::uint128_t *identity = nullptr, bool ordered = true);
+common::uint128_t RTDECL(ReduceUnsigned16Value)(const Descriptor &,
+ ValueReductionOperation<common::uint128_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const common::uint128_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceUnsigned16DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<common::uint128_t>, const char *source,
+ int line, int dim, const Descriptor *mask = nullptr,
+ const common::uint128_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceUnsigned16DimValue)(Descriptor &result,
+ const Descriptor &array, ValueReductionOperation<common::uint128_t>,
+ const char *source, int line, int dim, const Descriptor *mask = nullptr,
+ const common::uint128_t *identity = nullptr, bool ordered = true);
+#endif
+
+// REAL/COMPLEX(2 & 3) return 32-bit float results for the caller to downconvert
+float RTDECL(ReduceReal2Ref)(const Descriptor &,
+ ReferenceReductionOperation<float>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const float *identity = nullptr, bool ordered = true);
+float RTDECL(ReduceReal2Value)(const Descriptor &,
+ ValueReductionOperation<float>, const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr, const float *identity = nullptr,
+ bool ordered = true);
+void RTDECL(ReduceReal2DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<float>, const char *source, int line, int dim,
+ const Descriptor *mask = nullptr, const float *identity = nullptr,
+ bool ordered = true);
+void RTDECL(ReduceReal2DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<float>, const char *source, int line, int dim,
+ const Descriptor *mask = nullptr, const float *identity = nullptr,
+ bool ordered = true);
+float RTDECL(ReduceReal3Ref)(const Descriptor &,
+ ReferenceReductionOperation<float>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const float *identity = nullptr, bool ordered = true);
+float RTDECL(ReduceReal3Value)(const Descriptor &,
+ ValueReductionOperation<float>, const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr, const float *identity = nullptr,
+ bool ordered = true);
+void RTDECL(ReduceReal3DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<float>, const char *source, int line, int dim,
+ const Descriptor *mask = nullptr, const float *identity = nullptr,
+ bool ordered = true);
+void RTDECL(ReduceReal3DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<float>, const char *source, int line, int dim,
+ const Descriptor *mask = nullptr, const float *identity = nullptr,
+ bool ordered = true);
+float RTDECL(ReduceReal4Ref)(const Descriptor &,
+ ReferenceReductionOperation<float>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const float *identity = nullptr, bool ordered = true);
+float RTDECL(ReduceReal4Value)(const Descriptor &,
+ ValueReductionOperation<float>, const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr, const float *identity = nullptr,
+ bool ordered = true);
+void RTDECL(ReduceReal4DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<float>, const char *source, int line, int dim,
+ const Descriptor *mask = nullptr, const float *identity = nullptr,
+ bool ordered = true);
+void RTDECL(ReduceReal4DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<float>, const char *source, int line, int dim,
+ const Descriptor *mask = nullptr, const float *identity = nullptr,
+ bool ordered = true);
+double RTDECL(ReduceReal8Ref)(const Descriptor &,
+ ReferenceReductionOperation<double>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const double *identity = nullptr, bool ordered = true);
+double RTDECL(ReduceReal8Value)(const Descriptor &,
+ ValueReductionOperation<double>, const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr, const double *identity = nullptr,
+ bool ordered = true);
+void RTDECL(ReduceReal8DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<double>, const char *source, int line, int dim,
+ const Descriptor *mask = nullptr, const double *identity = nullptr,
+ bool ordered = true);
+void RTDECL(ReduceReal8DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<double>, const char *source, int line, int dim,
+ const Descriptor *mask = nullptr, const double *identity = nullptr,
+ bool ordered = true);
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDECL(ReduceReal10Ref)(const Descriptor &,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Real, 10>>,
+ const char *source, int line, int dim = 0, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Real, 10> *identity = nullptr,
+ bool ordered = true);
+CppTypeFor<TypeCategory::Real, 10> RTDECL(ReduceReal10Value)(const Descriptor &,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Real, 10>>,
+ const char *source, int line, int dim = 0, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Real, 10> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(ReduceReal10DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Real, 10>>,
+ const char *source, int line, int dim, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Real, 10> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(ReduceReal10DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Real, 10>>,
+ const char *source, int line, int dim, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Real, 10> *identity = nullptr,
+ bool ordered = true);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppFloat128Type RTDECL(ReduceReal16Ref)(const Descriptor &,
+ ReferenceReductionOperation<CppFloat128Type>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const CppFloat128Type *identity = nullptr, bool ordered = true);
+CppFloat128Type RTDECL(ReduceReal16Value)(const Descriptor &,
+ ValueReductionOperation<CppFloat128Type>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const CppFloat128Type *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceReal16DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<CppFloat128Type>, const char *source, int line,
+ int dim, const Descriptor *mask = nullptr,
+ const CppFloat128Type *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceReal16DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<CppFloat128Type>, const char *source, int line,
+ int dim, const Descriptor *mask = nullptr,
+ const CppFloat128Type *identity = nullptr, bool ordered = true);
+#endif
+
+void RTDECL(CppReduceComplex2Ref)(CppTypeFor<TypeCategory::Complex, 4> &,
+ const Descriptor &,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Complex, 4>>,
+ const char *source, int line, int dim = 0, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 4> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(CppReduceComplex2Value)(CppTypeFor<TypeCategory::Complex, 4> &,
+ const Descriptor &,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Complex, 4>>,
+ const char *source, int line, int dim = 0, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 4> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(CppReduceComplex2DimRef)(Descriptor &result,
+ const Descriptor &array,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Complex, 4>>,
+ const char *source, int line, int dim, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 4> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(CppReduceComplex2DimValue)(Descriptor &result,
+ const Descriptor &array,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Complex, 4>>,
+ const char *source, int line, int dim, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 4> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(CppReduceComplex3Ref)(CppTypeFor<TypeCategory::Complex, 4> &,
+ const Descriptor &,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Complex, 4>>,
+ const char *source, int line, int dim = 0, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 4> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(CppReduceComplex3Value)(CppTypeFor<TypeCategory::Complex, 4> &,
+ const Descriptor &,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Complex, 4>>,
+ const char *source, int line, int dim = 0, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 4> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(CppReduceComplex3DimRef)(Descriptor &result,
+ const Descriptor &array,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Complex, 4>>,
+ const char *source, int line, int dim, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 4> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(CppReduceComplex3DimValue)(Descriptor &result,
+ const Descriptor &array,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Complex, 4>>,
+ const char *source, int line, int dim, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 4> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(CppReduceComplex4Ref)(CppTypeFor<TypeCategory::Complex, 4> &,
+ const Descriptor &,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Complex, 4>>,
+ const char *source, int line, int dim = 0, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 4> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(CppReduceComplex4Value)(CppTypeFor<TypeCategory::Complex, 4> &,
+ const Descriptor &,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Complex, 4>>,
+ const char *source, int line, int dim = 0, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 4> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(CppReduceComplex4DimRef)(Descriptor &result,
+ const Descriptor &array,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Complex, 4>>,
+ const char *source, int line, int dim, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 4> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(CppReduceComplex4DimValue)(Descriptor &result,
+ const Descriptor &array,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Complex, 4>>,
+ const char *source, int line, int dim, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 4> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(CppReduceComplex8Ref)(CppTypeFor<TypeCategory::Complex, 8> &,
+ const Descriptor &,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Complex, 8>>,
+ const char *source, int line, int dim = 0, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 8> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(CppReduceComplex8Value)(CppTypeFor<TypeCategory::Complex, 8> &,
+ const Descriptor &,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Complex, 8>>,
+ const char *source, int line, int dim = 0, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 8> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(CppReduceComplex8DimRef)(Descriptor &result,
+ const Descriptor &array,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Complex, 8>>,
+ const char *source, int line, int dim, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 8> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(CppReduceComplex8DimValue)(Descriptor &result,
+ const Descriptor &array,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Complex, 8>>,
+ const char *source, int line, int dim, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 8> *identity = nullptr,
+ bool ordered = true);
+#if HAS_FLOAT80
+void RTDECL(CppReduceComplex10Ref)(CppTypeFor<TypeCategory::Complex, 10> &,
+ const Descriptor &,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Complex, 10>>,
+ const char *source, int line, int dim = 0, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 10> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(CppReduceComplex10Value)(CppTypeFor<TypeCategory::Complex, 10> &,
+ const Descriptor &,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Complex, 10>>,
+ const char *source, int line, int dim = 0, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 10> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(CppReduceComplex10DimRef)(Descriptor &result,
+ const Descriptor &array,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Complex, 10>>,
+ const char *source, int line, int dim, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 10> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(CppReduceComplex10DimValue)(Descriptor &result,
+ const Descriptor &array,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Complex, 10>>,
+ const char *source, int line, int dim, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 10> *identity = nullptr,
+ bool ordered = true);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+void RTDECL(CppReduceComplex16Ref)(CppTypeFor<TypeCategory::Complex, 16> &,
+ const Descriptor &,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Complex, 16>>,
+ const char *source, int line, int dim = 0, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 16> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(CppReduceComplex16Value)(CppTypeFor<TypeCategory::Complex, 16> &,
+ const Descriptor &,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Complex, 16>>,
+ const char *source, int line, int dim = 0, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 16> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(CppReduceComplex16DimRef)(Descriptor &result,
+ const Descriptor &array,
+ ReferenceReductionOperation<CppTypeFor<TypeCategory::Complex, 16>>,
+ const char *source, int line, int dim, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 16> *identity = nullptr,
+ bool ordered = true);
+void RTDECL(CppReduceComplex16DimValue)(Descriptor &result,
+ const Descriptor &array,
+ ValueReductionOperation<CppTypeFor<TypeCategory::Complex, 16>>,
+ const char *source, int line, int dim, const Descriptor *mask = nullptr,
+ const CppTypeFor<TypeCategory::Complex, 16> *identity = nullptr,
+ bool ordered = true);
+#endif
+
+bool RTDECL(ReduceLogical1Ref)(const Descriptor &,
+ ReferenceReductionOperation<std::int8_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::int8_t *identity = nullptr, bool ordered = true);
+bool RTDECL(ReduceLogical1Value)(const Descriptor &,
+ ValueReductionOperation<std::int8_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::int8_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceLogical1DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::int8_t>, const char *source, int line,
+ int dim, const Descriptor *mask = nullptr,
+ const std::int8_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceLogical1DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<std::int8_t>, const char *source, int line, int dim,
+ const Descriptor *mask = nullptr, const std::int8_t *identity = nullptr,
+ bool ordered = true);
+bool RTDECL(ReduceLogical2Ref)(const Descriptor &,
+ ReferenceReductionOperation<std::int16_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::int16_t *identity = nullptr, bool ordered = true);
+bool RTDECL(ReduceLogical2Value)(const Descriptor &,
+ ValueReductionOperation<std::int16_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::int16_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceLogical2DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::int16_t>, const char *source, int line,
+ int dim, const Descriptor *mask = nullptr,
+ const std::int16_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceLogical2DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<std::int16_t>, const char *source, int line,
+ int dim, const Descriptor *mask = nullptr,
+ const std::int16_t *identity = nullptr, bool ordered = true);
+bool RTDECL(ReduceLogical4Ref)(const Descriptor &,
+ ReferenceReductionOperation<std::int32_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::int32_t *identity = nullptr, bool ordered = true);
+bool RTDECL(ReduceLogical4Value)(const Descriptor &,
+ ValueReductionOperation<std::int32_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::int32_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceLogical4DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::int32_t>, const char *source, int line,
+ int dim, const Descriptor *mask = nullptr,
+ const std::int32_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceLogical4DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<std::int32_t>, const char *source, int line,
+ int dim, const Descriptor *mask = nullptr,
+ const std::int32_t *identity = nullptr, bool ordered = true);
+bool RTDECL(ReduceLogical8Ref)(const Descriptor &,
+ ReferenceReductionOperation<std::int64_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::int64_t *identity = nullptr, bool ordered = true);
+bool RTDECL(ReduceLogical8Value)(const Descriptor &,
+ ValueReductionOperation<std::int64_t>, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr,
+ const std::int64_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceLogical8DimRef)(Descriptor &result, const Descriptor &array,
+ ReferenceReductionOperation<std::int64_t>, const char *source, int line,
+ int dim, const Descriptor *mask = nullptr,
+ const std::int64_t *identity = nullptr, bool ordered = true);
+void RTDECL(ReduceLogical8DimValue)(Descriptor &result, const Descriptor &array,
+ ValueReductionOperation<std::int64_t>, const char *source, int line,
+ int dim, const Descriptor *mask = nullptr,
+ const std::int64_t *identity = nullptr, bool ordered = true);
+
+void RTDECL(ReduceChar1)(char *result, const Descriptor &array,
+ ReductionCharOperation<char>, const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr, const char *identity = nullptr,
+ bool ordered = true);
+void RTDECL(ReduceCharacter1Dim)(Descriptor &result, const Descriptor &array,
+ ReductionCharOperation<char>, const char *source, int line, int dim,
+ const Descriptor *mask = nullptr, const char *identity = nullptr,
+ bool ordered = true);
+void RTDECL(ReduceChar2)(char16_t *result, const Descriptor &array,
+ ReductionCharOperation<char16_t>, const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr, const char16_t *identity = nullptr,
+ bool ordered = true);
+void RTDECL(ReduceCharacter2Dim)(Descriptor &result, const Descriptor &array,
+ ReductionCharOperation<char16_t>, const char *source, int line, int dim,
+ const Descriptor *mask = nullptr, const char16_t *identity = nullptr,
+ bool ordered = true);
+void RTDECL(ReduceChar4)(char32_t *result, const Descriptor &array,
+ ReductionCharOperation<char32_t>, const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr, const char32_t *identity = nullptr,
+ bool ordered = true);
+void RTDECL(ReduceCharacter4Dim)(Descriptor &result, const Descriptor &array,
+ ReductionCharOperation<char32_t>, const char *source, int line, int dim,
+ const Descriptor *mask = nullptr, const char32_t *identity = nullptr,
+ bool ordered = true);
+
+void RTDECL(ReduceDerivedType)(char *result, const Descriptor &array,
+ ReductionDerivedTypeOperation, const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr, const char *identity = nullptr,
+ bool ordered = true);
+void RTDECL(ReduceDerivedTypeDim)(Descriptor &result, const Descriptor &array,
+ ReductionDerivedTypeOperation, const char *source, int line, int dim,
+ const Descriptor *mask = nullptr, const char *identity = nullptr,
+ bool ordered = true);
+
+} // extern "C"
+} // namespace Fortran::runtime
+#endif // FORTRAN_RUNTIME_REDUCE_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/reduction.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/reduction.h
new file mode 100644
index 00000000000..6945ed4a653
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/reduction.h
@@ -0,0 +1,548 @@
+//===-- include/flang/Runtime/reduction.h -----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Defines the API for the reduction transformational intrinsic functions.
+
+#ifndef FORTRAN_RUNTIME_REDUCTION_H_
+#define FORTRAN_RUNTIME_REDUCTION_H_
+
+#include "flang/Common/float128.h"
+#include "flang/Common/uint128.h"
+#include "flang/Runtime/cpp-type.h"
+#include "flang/Runtime/entry-names.h"
+#include <cfloat>
+#include <cinttypes>
+#include <complex>
+#include <cstdint>
+
+namespace Fortran::runtime {
+
+class Descriptor;
+
+extern "C" {
+
+// Reductions that are known to return scalars have per-type entry
+// points. These cover the cases that either have no DIM=
+// argument or have an argument rank of 1. Pass 0 for no DIM=
+// or the value of the DIM= argument so that it may be checked.
+// The data type in the descriptor is checked against the expected
+// return type.
+//
+// Reductions that return arrays are the remaining cases in which
+// the argument rank is greater than one and there is a DIM=
+// argument present. These cases establish and allocate their
+// results in a caller-supplied descriptor, which is assumed to
+// be large enough.
+//
+// Complex-valued SUM and PRODUCT reductions and complex-valued
+// DOT_PRODUCT have their API entry points defined in complex-reduction.h;
+// these here are C wrappers around C++ implementations so as to keep
+// usage of C's _Complex types out of C++ code.
+
+// SUM()
+
+std::int8_t RTDECL(SumInteger1)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::int16_t RTDECL(SumInteger2)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::int32_t RTDECL(SumInteger4)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::int64_t RTDECL(SumInteger8)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+#ifdef __SIZEOF_INT128__
+common::int128_t RTDECL(SumInteger16)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+#endif
+std::uint8_t RTDECL(SumUnsigned1)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::uint16_t RTDECL(SumUnsigned2)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::uint32_t RTDECL(SumUnsigned4)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::uint64_t RTDECL(SumUnsigned8)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+#ifdef __SIZEOF_INT128__
+common::uint128_t RTDECL(SumUnsigned16)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+#endif
+
+// REAL/COMPLEX(2 & 3) return 32-bit float results for the caller to downconvert
+float RTDECL(SumReal2)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+float RTDECL(SumReal3)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+float RTDECL(SumReal4)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+double RTDECL(SumReal8)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDECL(SumReal10)(const Descriptor &,
+ const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppFloat128Type RTDECL(SumReal16)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+#endif
+
+void RTDECL(CppSumComplex2)(CppTypeFor<TypeCategory::Complex, 4> &,
+ const Descriptor &, const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr);
+void RTDECL(CppSumComplex3)(CppTypeFor<TypeCategory::Complex, 4> &,
+ const Descriptor &, const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr);
+void RTDECL(CppSumComplex4)(CppTypeFor<TypeCategory::Complex, 4> &,
+ const Descriptor &, const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr);
+void RTDECL(CppSumComplex8)(CppTypeFor<TypeCategory::Complex, 8> &,
+ const Descriptor &, const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr);
+#if HAS_FLOAT80
+void RTDECL(CppSumComplex10)(CppTypeFor<TypeCategory::Complex, 10> &,
+ const Descriptor &, const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+void RTDECL(CppSumComplex16)(CppTypeFor<TypeCategory::Complex, 16> &,
+ const Descriptor &, const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr);
+#endif
+
+void RTDECL(SumDim)(Descriptor &result, const Descriptor &array, int dim,
+ const char *source, int line, const Descriptor *mask = nullptr);
+
+// PRODUCT()
+
+std::int8_t RTDECL(ProductInteger1)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::int16_t RTDECL(ProductInteger2)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::int32_t RTDECL(ProductInteger4)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::int64_t RTDECL(ProductInteger8)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+#ifdef __SIZEOF_INT128__
+common::int128_t RTDECL(ProductInteger16)(const Descriptor &,
+ const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr);
+#endif
+std::uint8_t RTDECL(ProductUnsigned1)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::uint16_t RTDECL(ProductUnsigned2)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::uint32_t RTDECL(ProductUnsigned4)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::uint64_t RTDECL(ProductUnsigned8)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+#ifdef __SIZEOF_INT128__
+common::uint128_t RTDECL(ProductUnsigned16)(const Descriptor &,
+ const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr);
+#endif
+
+// REAL/COMPLEX(2 & 3) return 32-bit float results for the caller to downconvert
+float RTDECL(ProductReal2)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+float RTDECL(ProductReal3)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+float RTDECL(ProductReal4)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+double RTDECL(ProductReal8)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDECL(ProductReal10)(const Descriptor &,
+ const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppFloat128Type RTDECL(ProductReal16)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+#endif
+
+void RTDECL(CppProductComplex2)(CppTypeFor<TypeCategory::Complex, 4> &,
+ const Descriptor &, const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr);
+void RTDECL(CppProductComplex3)(CppTypeFor<TypeCategory::Complex, 4> &,
+ const Descriptor &, const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr);
+void RTDECL(CppProductComplex4)(CppTypeFor<TypeCategory::Complex, 4> &,
+ const Descriptor &, const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr);
+void RTDECL(CppProductComplex8)(CppTypeFor<TypeCategory::Complex, 8> &,
+ const Descriptor &, const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr);
+#if HAS_FLOAT80
+void RTDECL(CppProductComplex10)(CppTypeFor<TypeCategory::Complex, 10> &,
+ const Descriptor &, const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+void RTDECL(CppProductComplex16)(CppTypeFor<TypeCategory::Complex, 16> &,
+ const Descriptor &, const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr);
+#endif
+
+void RTDECL(ProductDim)(Descriptor &result, const Descriptor &array, int dim,
+ const char *source, int line, const Descriptor *mask = nullptr);
+
+// IALL, IANY, IPARITY
+std::int8_t RTDECL(IAll1)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+std::int16_t RTDECL(IAll2)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+std::int32_t RTDECL(IAll4)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+std::int64_t RTDECL(IAll8)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+#ifdef __SIZEOF_INT128__
+common::int128_t RTDECL(IAll16)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+#endif
+void RTDECL(IAllDim)(Descriptor &result, const Descriptor &array, int dim,
+ const char *source, int line, const Descriptor *mask = nullptr);
+
+std::int8_t RTDECL(IAny1)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+std::int16_t RTDECL(IAny2)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+std::int32_t RTDECL(IAny4)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+std::int64_t RTDECL(IAny8)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+#ifdef __SIZEOF_INT128__
+common::int128_t RTDECL(IAny16)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+#endif
+void RTDECL(IAnyDim)(Descriptor &result, const Descriptor &array, int dim,
+ const char *source, int line, const Descriptor *mask = nullptr);
+
+std::int8_t RTDECL(IParity1)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+std::int16_t RTDECL(IParity2)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+std::int32_t RTDECL(IParity4)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+std::int64_t RTDECL(IParity8)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+#ifdef __SIZEOF_INT128__
+common::int128_t RTDECL(IParity16)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+#endif
+void RTDECL(IParityDim)(Descriptor &result, const Descriptor &array, int dim,
+ const char *source, int line, const Descriptor *mask = nullptr);
+
+// FINDLOC, MAXLOC, & MINLOC
+// These return allocated arrays in the supplied descriptor.
+// The default value for KIND= should be the default INTEGER in effect at
+// compilation time.
+void RTDECL(Findloc)(Descriptor &, const Descriptor &x,
+ const Descriptor &target, int kind, const char *source, int line,
+ const Descriptor *mask = nullptr, bool back = false);
+void RTDECL(FindlocDim)(Descriptor &, const Descriptor &x,
+ const Descriptor &target, int kind, int dim, const char *source, int line,
+ const Descriptor *mask = nullptr, bool back = false);
+void RTDECL(MaxlocCharacter)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MaxlocInteger1)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MaxlocInteger2)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MaxlocInteger4)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MaxlocInteger8)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MaxlocInteger16)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MaxlocUnsigned1)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MaxlocUnsigned2)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MaxlocUnsigned4)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MaxlocUnsigned8)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MaxlocUnsigned16)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MaxlocReal4)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MaxlocReal8)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MaxlocReal10)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MaxlocReal16)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MaxlocDim)(Descriptor &, const Descriptor &x, int kind, int dim,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MinlocCharacter)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MinlocInteger1)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MinlocInteger2)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MinlocInteger4)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MinlocInteger8)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MinlocInteger16)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MinlocUnsigned1)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MinlocUnsigned2)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MinlocUnsigned4)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MinlocUnsigned8)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MinlocUnsigned16)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MinlocReal4)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MinlocReal8)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MinlocReal10)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MinlocReal16)(Descriptor &, const Descriptor &, int kind,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+void RTDECL(MinlocDim)(Descriptor &, const Descriptor &x, int kind, int dim,
+ const char *source, int line, const Descriptor *mask = nullptr,
+ bool back = false);
+
+// MAXVAL and MINVAL
+std::int8_t RTDECL(MaxvalInteger1)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::int16_t RTDECL(MaxvalInteger2)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::int32_t RTDECL(MaxvalInteger4)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::int64_t RTDECL(MaxvalInteger8)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+#ifdef __SIZEOF_INT128__
+common::int128_t RTDECL(MaxvalInteger16)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+#endif
+std::uint8_t RTDECL(MaxvalUnsigned1)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::uint16_t RTDECL(MaxvalUnsigned2)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::uint32_t RTDECL(MaxvalUnsigned4)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::uint64_t RTDECL(MaxvalUnsigned8)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+#ifdef __SIZEOF_INT128__
+common::uint128_t RTDECL(MaxvalUnsigned16)(const Descriptor &,
+ const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr);
+#endif
+float RTDECL(MaxvalReal2)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+float RTDECL(MaxvalReal3)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+float RTDECL(MaxvalReal4)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+double RTDECL(MaxvalReal8)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDECL(MaxvalReal10)(const Descriptor &,
+ const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppFloat128Type RTDECL(MaxvalReal16)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+#endif
+void RTDECL(MaxvalCharacter)(Descriptor &, const Descriptor &,
+ const char *source, int line, const Descriptor *mask = nullptr);
+
+std::int8_t RTDECL(MinvalInteger1)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::int16_t RTDECL(MinvalInteger2)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::int32_t RTDECL(MinvalInteger4)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::int64_t RTDECL(MinvalInteger8)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+#ifdef __SIZEOF_INT128__
+common::int128_t RTDECL(MinvalInteger16)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+#endif
+std::uint8_t RTDECL(MinvalUnsigned1)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::uint16_t RTDECL(MinvalUnsigned2)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::uint32_t RTDECL(MinvalUnsigned4)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+std::uint64_t RTDECL(MinvalUnsigned8)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+#ifdef __SIZEOF_INT128__
+common::uint128_t RTDECL(MinvalUnsigned16)(const Descriptor &,
+ const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr);
+#endif
+float RTDECL(MinvalReal2)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+float RTDECL(MinvalReal3)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+float RTDECL(MinvalReal4)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+double RTDECL(MinvalReal8)(const Descriptor &, const char *source, int line,
+ int dim = 0, const Descriptor *mask = nullptr);
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDECL(MinvalReal10)(const Descriptor &,
+ const char *source, int line, int dim = 0,
+ const Descriptor *mask = nullptr);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppFloat128Type RTDECL(MinvalReal16)(const Descriptor &, const char *source,
+ int line, int dim = 0, const Descriptor *mask = nullptr);
+#endif
+void RTDECL(MinvalCharacter)(Descriptor &, const Descriptor &,
+ const char *source, int line, const Descriptor *mask = nullptr);
+
+void RTDECL(MaxvalDim)(Descriptor &, const Descriptor &, int dim,
+ const char *source, int line, const Descriptor *mask = nullptr);
+void RTDECL(MinvalDim)(Descriptor &, const Descriptor &, int dim,
+ const char *source, int line, const Descriptor *mask = nullptr);
+
+// NORM2
+float RTDECL(Norm2_2)(
+ const Descriptor &, const char *source, int line, int dim = 0);
+float RTDECL(Norm2_3)(
+ const Descriptor &, const char *source, int line, int dim = 0);
+float RTDECL(Norm2_4)(
+ const Descriptor &, const char *source, int line, int dim = 0);
+double RTDECL(Norm2_8)(
+ const Descriptor &, const char *source, int line, int dim = 0);
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDECL(Norm2_10)(
+ const Descriptor &, const char *source, int line, int dim = 0);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppFloat128Type RTDECL(Norm2_16)(
+ const Descriptor &, const char *source, int line, int dim = 0);
+void RTDECL(Norm2DimReal16)(
+ Descriptor &, const Descriptor &, int dim, const char *source, int line);
+#endif
+void RTDECL(Norm2Dim)(
+ Descriptor &, const Descriptor &, int dim, const char *source, int line);
+
+// ALL, ANY, COUNT, & PARITY logical reductions
+bool RTDECL(All)(const Descriptor &, const char *source, int line, int dim = 0);
+void RTDECL(AllDim)(Descriptor &result, const Descriptor &, int dim,
+ const char *source, int line);
+bool RTDECL(Any)(const Descriptor &, const char *source, int line, int dim = 0);
+void RTDECL(AnyDim)(Descriptor &result, const Descriptor &, int dim,
+ const char *source, int line);
+std::int64_t RTDECL(Count)(
+ const Descriptor &, const char *source, int line, int dim = 0);
+void RTDECL(CountDim)(Descriptor &result, const Descriptor &, int dim, int kind,
+ const char *source, int line);
+bool RTDECL(Parity)(
+ const Descriptor &, const char *source, int line, int dim = 0);
+void RTDECL(ParityDim)(Descriptor &result, const Descriptor &, int dim,
+ const char *source, int line);
+
+// DOT_PRODUCT
+std::int8_t RTDECL(DotProductInteger1)(const Descriptor &, const Descriptor &,
+ const char *source = nullptr, int line = 0);
+std::int16_t RTDECL(DotProductInteger2)(const Descriptor &, const Descriptor &,
+ const char *source = nullptr, int line = 0);
+std::int32_t RTDECL(DotProductInteger4)(const Descriptor &, const Descriptor &,
+ const char *source = nullptr, int line = 0);
+std::int64_t RTDECL(DotProductInteger8)(const Descriptor &, const Descriptor &,
+ const char *source = nullptr, int line = 0);
+#ifdef __SIZEOF_INT128__
+common::int128_t RTDECL(DotProductInteger16)(const Descriptor &,
+ const Descriptor &, const char *source = nullptr, int line = 0);
+#endif
+std::uint8_t RTDECL(DotProductUnsigned1)(const Descriptor &, const Descriptor &,
+ const char *source = nullptr, int line = 0);
+std::uint16_t RTDECL(DotProductUnsigned2)(const Descriptor &,
+ const Descriptor &, const char *source = nullptr, int line = 0);
+std::uint32_t RTDECL(DotProductUnsigned4)(const Descriptor &,
+ const Descriptor &, const char *source = nullptr, int line = 0);
+std::uint64_t RTDECL(DotProductUnsigned8)(const Descriptor &,
+ const Descriptor &, const char *source = nullptr, int line = 0);
+#ifdef __SIZEOF_INT128__
+common::uint128_t RTDECL(DotProductUnsigned16)(const Descriptor &,
+ const Descriptor &, const char *source = nullptr, int line = 0);
+#endif
+float RTDECL(DotProductReal2)(const Descriptor &, const Descriptor &,
+ const char *source = nullptr, int line = 0);
+float RTDECL(DotProductReal3)(const Descriptor &, const Descriptor &,
+ const char *source = nullptr, int line = 0);
+float RTDECL(DotProductReal4)(const Descriptor &, const Descriptor &,
+ const char *source = nullptr, int line = 0);
+double RTDECL(DotProductReal8)(const Descriptor &, const Descriptor &,
+ const char *source = nullptr, int line = 0);
+#if HAS_FLOAT80
+CppTypeFor<TypeCategory::Real, 10> RTDECL(DotProductReal10)(const Descriptor &,
+ const Descriptor &, const char *source = nullptr, int line = 0);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+CppFloat128Type RTDECL(DotProductReal16)(const Descriptor &, const Descriptor &,
+ const char *source = nullptr, int line = 0);
+#endif
+void RTDECL(CppDotProductComplex2)(CppTypeFor<TypeCategory::Complex, 4> &,
+ const Descriptor &, const Descriptor &, const char *source = nullptr,
+ int line = 0);
+void RTDECL(CppDotProductComplex3)(CppTypeFor<TypeCategory::Complex, 4> &,
+ const Descriptor &, const Descriptor &, const char *source = nullptr,
+ int line = 0);
+void RTDECL(CppDotProductComplex4)(CppTypeFor<TypeCategory::Complex, 4> &,
+ const Descriptor &, const Descriptor &, const char *source = nullptr,
+ int line = 0);
+void RTDECL(CppDotProductComplex8)(CppTypeFor<TypeCategory::Complex, 8> &,
+ const Descriptor &, const Descriptor &, const char *source = nullptr,
+ int line = 0);
+#if HAS_FLOAT80
+void RTDECL(CppDotProductComplex10)(CppTypeFor<TypeCategory::Complex, 10> &,
+ const Descriptor &, const Descriptor &, const char *source = nullptr,
+ int line = 0);
+#endif
+#if HAS_LDBL128 || HAS_FLOAT128
+void RTDECL(CppDotProductComplex16)(CppTypeFor<TypeCategory::Complex, 16> &,
+ const Descriptor &, const Descriptor &, const char *source = nullptr,
+ int line = 0);
+#endif
+bool RTDECL(DotProductLogical)(const Descriptor &, const Descriptor &,
+ const char *source = nullptr, int line = 0);
+
+} // extern "C"
+} // namespace Fortran::runtime
+#endif // FORTRAN_RUNTIME_REDUCTION_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/stop.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/stop.h
new file mode 100644
index 00000000000..4ddc5cf49ec
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/stop.h
@@ -0,0 +1,43 @@
+//===-- include/flang/Runtime/stop.h ----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_RUNTIME_STOP_H_
+#define FORTRAN_RUNTIME_STOP_H_
+
+#include "flang/Runtime/c-or-cpp.h"
+#include "flang/Runtime/entry-names.h"
+#include "flang/Runtime/extensions.h"
+#include <stdlib.h>
+
+FORTRAN_EXTERN_C_BEGIN
+
+// Program-initiated image stop
+NORETURN RT_API_ATTRS void RTNAME(StopStatement)(
+ int code DEFAULT_VALUE(EXIT_SUCCESS), bool isErrorStop DEFAULT_VALUE(false),
+ bool quiet DEFAULT_VALUE(false));
+NORETURN RT_API_ATTRS void RTNAME(StopStatementText)(const char *, size_t,
+ bool isErrorStop DEFAULT_VALUE(false), bool quiet DEFAULT_VALUE(false));
+void RTNAME(PauseStatement)(NO_ARGUMENTS);
+void RTNAME(PauseStatementInt)(int);
+void RTNAME(PauseStatementText)(const char *, size_t);
+NORETURN void RTNAME(FailImageStatement)(NO_ARGUMENTS);
+NORETURN void RTNAME(ProgramEndStatement)(NO_ARGUMENTS);
+
+// Extensions
+NORETURN void RTNAME(Exit)(int status DEFAULT_VALUE(EXIT_SUCCESS));
+NORETURN void RTNAME(Abort)(NO_ARGUMENTS);
+void FORTRAN_PROCEDURE_NAME(backtrace)(NO_ARGUMENTS);
+
+// Crash with an error message when the program dynamically violates a Fortran
+// constraint.
+NORETURN RT_API_ATTRS void RTNAME(ReportFatalUserError)(
+ const char *message, const char *source, int line);
+
+FORTRAN_EXTERN_C_END
+
+#endif // FORTRAN_RUNTIME_STOP_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/support.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/support.h
new file mode 100644
index 00000000000..8a345bee7f8
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/support.h
@@ -0,0 +1,54 @@
+//===-- include/flang/Runtime/support.h -------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Defines APIs for runtime support code for lowering.
+#ifndef FORTRAN_RUNTIME_SUPPORT_H_
+#define FORTRAN_RUNTIME_SUPPORT_H_
+
+#include "flang/Common/ISO_Fortran_binding_wrapper.h"
+#include "flang/Runtime/entry-names.h"
+#include <cstddef>
+#include <cstdint>
+
+namespace Fortran::runtime {
+
+class Descriptor;
+
+namespace typeInfo {
+class DerivedType;
+}
+
+enum class LowerBoundModifier : int {
+ Preserve = 0,
+ SetToOnes = 1,
+ SetToZeroes = 2
+};
+
+extern "C" {
+
+// Predicate: is the storage described by a Descriptor contiguous in memory?
+bool RTDECL(IsContiguous)(const Descriptor &);
+
+// Predicate: is the storage described by a Descriptor contiguous in memory
+// up to the given dimension?
+bool RTDECL(IsContiguousUpTo)(const Descriptor &, int);
+
+// Predicate: is this descriptor describing an assumed-size array?
+bool RTDECL(IsAssumedSize)(const Descriptor &);
+
+// Copy "from" descriptor into "to" descriptor and update "to" dynamic type,
+// CFI_attribute, and lower bounds according to the other arguments.
+// "newDynamicType" may be a null pointer in which case "to" dynamic type is the
+// one of "from".
+void RTDECL(CopyAndUpdateDescriptor)(Descriptor &to, const Descriptor &from,
+ const typeInfo::DerivedType *newDynamicType,
+ ISO::CFI_attribute_t newAttribute, enum LowerBoundModifier newLowerBounds);
+
+} // extern "C"
+} // namespace Fortran::runtime
+#endif // FORTRAN_RUNTIME_SUPPORT_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/temporary-stack.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/temporary-stack.h
new file mode 100644
index 00000000000..3c1a4ea11a4
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/temporary-stack.h
@@ -0,0 +1,67 @@
+//===-- include/flang/Runtime/temporary-stack.h -----------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+// Runtime functions for storing a dynamically resizable number of temporaries.
+// For use in HLFIR lowering.
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_RUNTIME_TEMPORARY_STACK_H_
+#define FORTRAN_RUNTIME_TEMPORARY_STACK_H_
+
+#include "flang/Runtime/entry-names.h"
+#include <stdint.h>
+
+namespace Fortran::runtime {
+class Descriptor;
+extern "C" {
+
+// Stores both the descriptor and a copy of the value in a dynamically resizable
+// data structure identified by opaquePtr. All value stacks must be destroyed
+// at the end of their lifetime and not used afterwards.
+// Popped descriptors point to the copy of the value, not the original address
+// of the value. This copy is dynamically allocated, it is up to the caller to
+// free the value pointed to by the box. The copy operation is a simple memcpy.
+// The sourceFile and line number used when creating the stack are shared for
+// all operations.
+// Opaque pointers returned from these are incompatible with those returned by
+// the flavours for storing descriptors.
+[[nodiscard]] void *RTNAME(CreateValueStack)(
+ const char *sourceFile = nullptr, int line = 0);
+void RTNAME(PushValue)(void *opaquePtr, const Descriptor &value);
+// Note: retValue should be large enough to hold the right number of dimensions,
+// and the optional descriptor addendum
+void RTNAME(PopValue)(void *opaquePtr, Descriptor &retValue);
+// Return the i'th element into retValue (which must be the right size). An
+// exact copy of this descriptor remains in this storage so this one should not
+// be deallocated
+void RTNAME(ValueAt)(void *opaquePtr, uint64_t i, Descriptor &retValue);
+void RTNAME(DestroyValueStack)(void *opaquePtr);
+
+// Stores descriptors value in a dynamically resizable data structure identified
+// by opaquePtr. All descriptor stacks must be destroyed at the end of their
+// lifetime and not used afterwards.
+// Popped descriptors are identical to those which were pushed.
+// The sourceFile and line number used when creating the stack are shared for
+// all operations.
+// Opaque pointers returned from these are incompatible with those returned by
+// the flavours for storing both descriptors and values.
+[[nodiscard]] void *RTNAME(CreateDescriptorStack)(
+ const char *sourceFile = nullptr, int line = 0);
+void RTNAME(PushDescriptor)(void *opaquePtr, const Descriptor &value);
+// Note: retValue should be large enough to hold the right number of dimensions,
+// and the optional descriptor addendum
+void RTNAME(PopDescriptor)(void *opaquePtr, Descriptor &retValue);
+// Return the i'th element into retValue (which must be the right size). An
+// exact copy of this descriptor remains in this storage so this one should not
+// be deallocated
+void RTNAME(DescriptorAt)(void *opaquePtr, uint64_t i, Descriptor &retValue);
+void RTNAME(DestroyDescriptorStack)(void *opaquePtr);
+
+} // extern "C"
+} // namespace Fortran::runtime
+
+#endif // FORTRAN_RUNTIME_TEMPORARY_STACK_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/time-intrinsic.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/time-intrinsic.h
new file mode 100644
index 00000000000..80490a17e45
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/time-intrinsic.h
@@ -0,0 +1,51 @@
+//===-- include/flang/Runtime/time-intrinsic.h ------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Defines the API between compiled code and the implementations of time-related
+// intrinsic subroutines in the runtime library.
+
+#ifndef FORTRAN_RUNTIME_TIME_INTRINSIC_H_
+#define FORTRAN_RUNTIME_TIME_INTRINSIC_H_
+
+#include "flang/Runtime/entry-names.h"
+#include <cinttypes>
+#include <cstddef>
+
+namespace Fortran::runtime {
+
+class Descriptor;
+
+extern "C" {
+
+// Lowering may need to cast this result to match the precision of the default
+// real kind.
+double RTNAME(CpuTime)();
+
+// Interface for the SYSTEM_CLOCK intrinsic. We break it up into 3 distinct
+// function calls, one for each of SYSTEM_CLOCK's optional output arguments.
+// Lowering converts the results to the types of the actual arguments,
+// including the case of a real argument for COUNT_RATE=..
+// The kind argument to SystemClockCount and SystemClockCountMax is the
+// kind of the integer actual arguments, which are required to be the same
+// when both appear.
+std::int64_t RTNAME(SystemClockCount)(int kind = 8);
+std::int64_t RTNAME(SystemClockCountRate)(int kind = 8);
+std::int64_t RTNAME(SystemClockCountMax)(int kind = 8);
+
+// Interface for DATE_AND_TIME intrinsic.
+void RTNAME(DateAndTime)(char *date, std::size_t dateChars, char *time,
+ std::size_t timeChars, char *zone, std::size_t zoneChars,
+ const char *source = nullptr, int line = 0,
+ const Descriptor *values = nullptr);
+
+void RTNAME(Etime)(const Descriptor *values, const Descriptor *time,
+ const char *sourceFile, int line);
+
+} // extern "C"
+} // namespace Fortran::runtime
+#endif // FORTRAN_RUNTIME_TIME_INTRINSIC_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/transformational.h b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/transformational.h
new file mode 100644
index 00000000000..3393ed1dc98
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/include/flang/Runtime/transformational.h
@@ -0,0 +1,182 @@
+//===-- include/flang/Runtime/transformational.h ----------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Defines the API for the type-independent transformational intrinsic functions
+// that rearrange data in arrays: CSHIFT, EOSHIFT, PACK, RESHAPE, SPREAD,
+// TRANSPOSE, and UNPACK.
+// These are naive allocating implementations; optimized forms that manipulate
+// pointer descriptors or that supply functional views of arrays remain to
+// be defined and may instead be part of lowering (see docs/ArrayComposition.md)
+// for details).
+
+#ifndef FORTRAN_RUNTIME_TRANSFORMATIONAL_H_
+#define FORTRAN_RUNTIME_TRANSFORMATIONAL_H_
+
+#include "flang/Common/float128.h"
+#include "flang/Runtime/cpp-type.h"
+#include "flang/Runtime/entry-names.h"
+#include <cinttypes>
+
+namespace Fortran::runtime {
+
+class Descriptor;
+
+extern "C" {
+
+void RTDECL(Reshape)(Descriptor &result, const Descriptor &source,
+ const Descriptor &shape, const Descriptor *pad = nullptr,
+ const Descriptor *order = nullptr, const char *sourceFile = nullptr,
+ int line = 0);
+
+void RTDECL(BesselJn_2)(Descriptor &result, int32_t n1, int32_t n2, float x,
+ float bn2, float bn2_1, const char *sourceFile = nullptr, int line = 0);
+
+void RTDECL(BesselJn_3)(Descriptor &result, int32_t n1, int32_t n2, float x,
+ float bn2, float bn2_1, const char *sourceFile = nullptr, int line = 0);
+
+void RTDECL(BesselJn_4)(Descriptor &result, int32_t n1, int32_t n2, float x,
+ float bn2, float bn2_1, const char *sourceFile = nullptr, int line = 0);
+
+void RTDECL(BesselJn_8)(Descriptor &result, int32_t n1, int32_t n2, double x,
+ double bn2, double bn2_1, const char *sourceFile = nullptr, int line = 0);
+
+#if HAS_FLOAT80
+void RTDECL(BesselJn_10)(Descriptor &result, int32_t n1, int32_t n2,
+ CppTypeFor<TypeCategory::Real, 10> x,
+ CppTypeFor<TypeCategory::Real, 10> bn2,
+ CppTypeFor<TypeCategory::Real, 10> bn2_1, const char *sourceFile = nullptr,
+ int line = 0);
+#endif
+
+#if HAS_LDBL128 || HAS_FLOAT128
+void RTDECL(BesselJn_16)(Descriptor &result, int32_t n1, int32_t n2,
+ CppFloat128Type x, CppFloat128Type bn2, CppFloat128Type bn2_1,
+ const char *sourceFile = nullptr, int line = 0);
+#endif
+
+void RTDECL(BesselJnX0_2)(Descriptor &result, int32_t n1, int32_t n2,
+ const char *sourceFile = nullptr, int line = 0);
+
+void RTDECL(BesselJnX0_3)(Descriptor &result, int32_t n1, int32_t n2,
+ const char *sourceFile = nullptr, int line = 0);
+
+void RTDECL(BesselJnX0_4)(Descriptor &result, int32_t n1, int32_t n2,
+ const char *sourceFile = nullptr, int line = 0);
+
+void RTDECL(BesselJnX0_8)(Descriptor &result, int32_t n1, int32_t n2,
+ const char *sourceFile = nullptr, int line = 0);
+
+#if HAS_FLOAT80
+void RTDECL(BesselJnX0_10)(Descriptor &result, int32_t n1, int32_t n2,
+ const char *sourceFile = nullptr, int line = 0);
+#endif
+
+#if HAS_LDBL128 || HAS_FLOAT128
+void RTDECL(BesselJnX0_16)(Descriptor &result, int32_t n1, int32_t n2,
+ const char *sourceFile = nullptr, int line = 0);
+#endif
+
+void RTDECL(BesselYn_2)(Descriptor &result, int32_t n1, int32_t n2, float x,
+ float bn1, float bn1_1, const char *sourceFile = nullptr, int line = 0);
+
+void RTDECL(BesselYn_3)(Descriptor &result, int32_t n1, int32_t n2, float x,
+ float bn1, float bn1_1, const char *sourceFile = nullptr, int line = 0);
+
+void RTDECL(BesselYn_4)(Descriptor &result, int32_t n1, int32_t n2, float x,
+ float bn1, float bn1_1, const char *sourceFile = nullptr, int line = 0);
+
+void RTDECL(BesselYn_8)(Descriptor &result, int32_t n1, int32_t n2, double x,
+ double bn1, double bn1_1, const char *sourceFile = nullptr, int line = 0);
+
+#if HAS_FLOAT80
+void RTDECL(BesselYn_10)(Descriptor &result, int32_t n1, int32_t n2,
+ CppTypeFor<TypeCategory::Real, 10> x,
+ CppTypeFor<TypeCategory::Real, 10> bn1,
+ CppTypeFor<TypeCategory::Real, 10> bn1_1, const char *sourceFile = nullptr,
+ int line = 0);
+#endif
+
+#if HAS_LDBL128 || HAS_FLOAT128
+void RTDECL(BesselYn_16)(Descriptor &result, int32_t n1, int32_t n2,
+ CppFloat128Type x, CppFloat128Type bn1, CppFloat128Type bn1_1,
+ const char *sourceFile = nullptr, int line = 0);
+#endif
+
+void RTDECL(BesselYnX0_2)(Descriptor &result, int32_t n1, int32_t n2,
+ const char *sourceFile = nullptr, int line = 0);
+
+void RTDECL(BesselYnX0_3)(Descriptor &result, int32_t n1, int32_t n2,
+ const char *sourceFile = nullptr, int line = 0);
+
+void RTDECL(BesselYnX0_4)(Descriptor &result, int32_t n1, int32_t n2,
+ const char *sourceFile = nullptr, int line = 0);
+
+void RTDECL(BesselYnX0_8)(Descriptor &result, int32_t n1, int32_t n2,
+ const char *sourceFile = nullptr, int line = 0);
+
+#if HAS_FLOAT80
+void RTDECL(BesselYnX0_10)(Descriptor &result, int32_t n1, int32_t n2,
+ const char *sourceFile = nullptr, int line = 0);
+#endif
+
+#if HAS_LDBL128 || HAS_FLOAT128
+void RTDECL(BesselYnX0_16)(Descriptor &result, int32_t n1, int32_t n2,
+ const char *sourceFile = nullptr, int line = 0);
+#endif
+
+void RTDECL(Cshift)(Descriptor &result, const Descriptor &source,
+ const Descriptor &shift, int dim = 1, const char *sourceFile = nullptr,
+ int line = 0);
+void RTDECL(CshiftVector)(Descriptor &result, const Descriptor &source,
+ std::int64_t shift, const char *sourceFile = nullptr, int line = 0);
+
+void RTDECL(Eoshift)(Descriptor &result, const Descriptor &source,
+ const Descriptor &shift, const Descriptor *boundary = nullptr, int dim = 1,
+ const char *sourceFile = nullptr, int line = 0);
+void RTDECL(EoshiftVector)(Descriptor &result, const Descriptor &source,
+ std::int64_t shift, const Descriptor *boundary = nullptr,
+ const char *sourceFile = nullptr, int line = 0);
+
+void RTDECL(Pack)(Descriptor &result, const Descriptor &source,
+ const Descriptor &mask, const Descriptor *vector = nullptr,
+ const char *sourceFile = nullptr, int line = 0);
+
+/// Produce a shallow copy of the \p source in \p result.
+/// The \p source may have any type and rank.
+/// Unless \p source is unallocated, the \p result will
+/// be allocated using the same shape and dynamic type,
+/// and will contain the same top-level values as the \p source.
+/// The \p result will have the default lower bounds, if it is an array.
+/// As the name suggests, it is different from the Assign runtime,
+/// because it does not perform recursive assign actions
+/// for the components of the derived types.
+void RTDECL(ShallowCopy)(Descriptor &result, const Descriptor &source,
+ const char *sourceFile = nullptr, int line = 0);
+
+/// Same as ShallowCopy, where the caller provides a pre-allocated
+/// \p result. The \p source and \p result must be conforming:
+/// * Same rank.
+/// * Same extents.
+/// * Same size and type of elements (including the type parameters).
+/// If \p result is an array, its lower bounds are not affected.
+void RTDECL(ShallowCopyDirect)(const Descriptor &result,
+ const Descriptor &source, const char *sourceFile = nullptr, int line = 0);
+
+void RTDECL(Spread)(Descriptor &result, const Descriptor &source, int dim,
+ std::int64_t ncopies, const char *sourceFile = nullptr, int line = 0);
+
+void RTDECL(Transpose)(Descriptor &result, const Descriptor &matrix,
+ const char *sourceFile = nullptr, int line = 0);
+
+void RTDECL(Unpack)(Descriptor &result, const Descriptor &vector,
+ const Descriptor &mask, const Descriptor &field,
+ const char *sourceFile = nullptr, int line = 0);
+
+} // extern "C"
+} // namespace Fortran::runtime
+#endif // FORTRAN_RUNTIME_TRANSFORMATIONAL_H_
diff --git a/contrib/libs/llvm/flang-rt/flang/lib/Decimal/big-radix-floating-point.h b/contrib/libs/llvm/flang-rt/flang/lib/Decimal/big-radix-floating-point.h
new file mode 100644
index 00000000000..f9afebf5b3d
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/lib/Decimal/big-radix-floating-point.h
@@ -0,0 +1,396 @@
+//===-- lib/Decimal/big-radix-floating-point.h ------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FORTRAN_DECIMAL_BIG_RADIX_FLOATING_POINT_H_
+#define FORTRAN_DECIMAL_BIG_RADIX_FLOATING_POINT_H_
+
+// This is a helper class for use in floating-point conversions between
+// binary and decimal representations. It holds a multiple-precision
+// integer value using digits of a radix that is a large even power of ten
+// (10,000,000,000,000,000 by default, 10**16). These digits are accompanied
+// by a signed exponent that denotes multiplication by a power of ten.
+// The effective radix point is to the right of the digits (i.e., they do
+// not represent a fraction).
+//
+// The operations supported by this class are limited to those required
+// for conversions between binary and decimal representations; it is not
+// a general-purpose facility.
+
+#include "flang/Common/bit-population-count.h"
+#include "flang/Common/leading-zero-bit-count.h"
+#include "flang/Common/uint128.h"
+#include "flang/Decimal/binary-floating-point.h"
+#include "flang/Decimal/decimal.h"
+#include <cinttypes>
+#include <limits>
+#include <type_traits>
+
+// Some environments, viz. glibc 2.17, allow the macro HUGE
+// to leak out of <math.h>.
+#undef HUGE
+
+namespace Fortran::decimal {
+
+static constexpr std::uint64_t TenToThe(int power) {
+ return power <= 0 ? 1 : 10 * TenToThe(power - 1);
+}
+
+// 10**(LOG10RADIX + 3) must be < 2**wordbits, and LOG10RADIX must be
+// even, so that pairs of decimal digits do not straddle Digits.
+// So LOG10RADIX must be 16 or 6.
+template <int PREC, int LOG10RADIX = 16> class BigRadixFloatingPointNumber {
+public:
+ using Real = BinaryFloatingPointNumber<PREC>;
+ static constexpr int log10Radix{LOG10RADIX};
+
+private:
+ static constexpr std::uint64_t uint64Radix{TenToThe(log10Radix)};
+ static constexpr int minDigitBits{
+ 64 - common::LeadingZeroBitCount(uint64Radix)};
+ using Digit = common::HostUnsignedIntType<minDigitBits>;
+ static constexpr Digit radix{uint64Radix};
+ static_assert(radix < std::numeric_limits<Digit>::max() / 1000,
+ "radix is somehow too big");
+ static_assert(radix > std::numeric_limits<Digit>::max() / 10000,
+ "radix is somehow too small");
+
+ // The base-2 logarithm of the least significant bit that can arise
+ // in a subnormal IEEE floating-point number.
+ static constexpr int minLog2AnyBit{
+ -Real::exponentBias - Real::binaryPrecision};
+
+ // The number of Digits needed to represent the smallest subnormal.
+ static constexpr int maxDigits{3 - minLog2AnyBit / log10Radix};
+
+public:
+ explicit RT_API_ATTRS BigRadixFloatingPointNumber(
+ enum FortranRounding rounding = RoundNearest)
+ : rounding_{rounding} {}
+
+ // Converts a binary floating point value.
+ explicit RT_API_ATTRS BigRadixFloatingPointNumber(
+ Real, enum FortranRounding = RoundNearest);
+
+ RT_API_ATTRS BigRadixFloatingPointNumber &SetToZero() {
+ isNegative_ = false;
+ digits_ = 0;
+ exponent_ = 0;
+ return *this;
+ }
+
+ RT_API_ATTRS bool IsInteger() const { return exponent_ >= 0; }
+
+ // Converts decimal floating-point to binary.
+ RT_API_ATTRS ConversionToBinaryResult<PREC> ConvertToBinary();
+
+ // Parses and converts to binary. Handles leading spaces,
+ // "NaN", & optionally-signed "Inf". Does not skip internal
+ // spaces.
+ // The argument is a reference to a pointer that is left
+ // pointing to the first character that wasn't parsed.
+ RT_API_ATTRS ConversionToBinaryResult<PREC> ConvertToBinary(
+ const char *&, const char *end = nullptr);
+
+ // Formats a decimal floating-point number to a user buffer.
+ // May emit "NaN" or "Inf", or an possibly-signed integer.
+ // No decimal point is written, but if it were, it would be
+ // after the last digit; the effective decimal exponent is
+ // returned as part of the result structure so that it can be
+ // formatted by the client.
+ RT_API_ATTRS ConversionToDecimalResult ConvertToDecimal(
+ char *, std::size_t, enum DecimalConversionFlags, int digits) const;
+
+ // Discard decimal digits not needed to distinguish this value
+ // from the decimal encodings of two others (viz., the nearest binary
+ // floating-point numbers immediately below and above this one).
+ // The last decimal digit may not be uniquely determined in all
+ // cases, and will be the mean value when that is so (e.g., if
+ // last decimal digit values 6-8 would all work, it'll be a 7).
+ // This minimization necessarily assumes that the value will be
+ // emitted and read back into the same (or less precise) format
+ // with default rounding to the nearest value.
+ RT_API_ATTRS void Minimize(
+ BigRadixFloatingPointNumber &&less, BigRadixFloatingPointNumber &&more);
+
+ template <typename STREAM> STREAM &Dump(STREAM &) const;
+
+private:
+ RT_API_ATTRS BigRadixFloatingPointNumber(
+ const BigRadixFloatingPointNumber &that)
+ : digits_{that.digits_}, exponent_{that.exponent_},
+ isNegative_{that.isNegative_}, rounding_{that.rounding_} {
+ for (int j{0}; j < digits_; ++j) {
+ digit_[j] = that.digit_[j];
+ }
+ }
+
+ RT_API_ATTRS bool IsZero() const {
+ // Don't assume normalization.
+ for (int j{0}; j < digits_; ++j) {
+ if (digit_[j] != 0) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ // Predicate: true when 10*value would cause a carry.
+ // (When this happens during decimal-to-binary conversion,
+ // there are more digits in the input string than can be
+ // represented precisely.)
+ RT_API_ATTRS bool IsFull() const {
+ return digits_ == digitLimit_ && digit_[digits_ - 1] >= radix / 10;
+ }
+
+ // Sets *this to an unsigned integer value.
+ // Returns any remainder.
+ template <typename UINT> RT_API_ATTRS UINT SetTo(UINT n) {
+ static_assert(
+ std::is_same_v<UINT, common::uint128_t> || std::is_unsigned_v<UINT>);
+ SetToZero();
+ while (n != 0) {
+ auto q{n / 10u};
+ if (n != q * 10) {
+ break;
+ }
+ ++exponent_;
+ n = q;
+ }
+ if constexpr (sizeof n < sizeof(Digit)) {
+ if (n != 0) {
+ digit_[digits_++] = n;
+ }
+ return 0;
+ } else {
+ while (n != 0 && digits_ < digitLimit_) {
+ auto q{n / radix};
+ digit_[digits_++] = static_cast<Digit>(n - q * radix);
+ n = q;
+ }
+ return n;
+ }
+ }
+
+ RT_API_ATTRS int RemoveLeastOrderZeroDigits() {
+ int remove{0};
+ if (digits_ > 0 && digit_[0] == 0) {
+ while (remove < digits_ && digit_[remove] == 0) {
+ ++remove;
+ }
+ if (remove >= digits_) {
+ digits_ = 0;
+ } else if (remove > 0) {
+#if defined __GNUC__ && __GNUC__ < 8
+ // (&& j + remove < maxDigits) was added to avoid GCC < 8 build failure
+ // on -Werror=array-bounds. This can be removed if -Werror is disable.
+ for (int j{0}; j + remove < digits_ && (j + remove < maxDigits); ++j) {
+#else
+ for (int j{0}; j + remove < digits_; ++j) {
+#endif
+ digit_[j] = digit_[j + remove];
+ }
+ digits_ -= remove;
+ }
+ }
+ return remove;
+ }
+
+ RT_API_ATTRS void RemoveLeadingZeroDigits() {
+ while (digits_ > 0 && digit_[digits_ - 1] == 0) {
+ --digits_;
+ }
+ }
+
+ RT_API_ATTRS void Normalize() {
+ RemoveLeadingZeroDigits();
+ exponent_ += RemoveLeastOrderZeroDigits() * log10Radix;
+ }
+
+ // This limited divisibility test only works for even divisors of the radix,
+ // which is fine since it's only ever used with 2 and 5.
+ template <int N> RT_API_ATTRS bool IsDivisibleBy() const {
+ static_assert(N > 1 && radix % N == 0, "bad modulus");
+ return digits_ == 0 || (digit_[0] % N) == 0;
+ }
+
+ template <unsigned DIVISOR> RT_API_ATTRS int DivideBy() {
+ Digit remainder{0};
+ for (int j{digits_ - 1}; j >= 0; --j) {
+ Digit q{digit_[j] / DIVISOR};
+ Digit nrem{digit_[j] - DIVISOR * q};
+ digit_[j] = q + (radix / DIVISOR) * remainder;
+ remainder = nrem;
+ }
+ return remainder;
+ }
+
+ RT_API_ATTRS void DivideByPowerOfTwo(int twoPow) { // twoPow <= log10Radix
+ Digit remainder{0};
+ auto mask{(Digit{1} << twoPow) - 1};
+ auto coeff{radix >> twoPow};
+ for (int j{digits_ - 1}; j >= 0; --j) {
+ auto nrem{digit_[j] & mask};
+ digit_[j] = (digit_[j] >> twoPow) + coeff * remainder;
+ remainder = nrem;
+ }
+ }
+
+ // Returns true on overflow
+ RT_API_ATTRS bool DivideByPowerOfTwoInPlace(int twoPow) {
+ if (digits_ > 0) {
+ while (twoPow > 0) {
+ int chunk{twoPow > log10Radix ? log10Radix : twoPow};
+ if ((digit_[0] & ((Digit{1} << chunk) - 1)) == 0) {
+ DivideByPowerOfTwo(chunk);
+ twoPow -= chunk;
+ continue;
+ }
+ twoPow -= chunk;
+ if (digit_[digits_ - 1] >> chunk != 0) {
+ if (digits_ == digitLimit_) {
+ return true; // overflow
+ }
+ digit_[digits_++] = 0;
+ }
+ auto remainder{digit_[digits_ - 1]};
+ exponent_ -= log10Radix;
+ auto coeff{radix >> chunk}; // precise; radix is (5*2)**log10Radix
+ auto mask{(Digit{1} << chunk) - 1};
+ for (int j{digits_ - 1}; j >= 1; --j) {
+ digit_[j] = (digit_[j - 1] >> chunk) + coeff * remainder;
+ remainder = digit_[j - 1] & mask;
+ }
+ digit_[0] = coeff * remainder;
+ }
+ }
+ return false; // no overflow
+ }
+
+ RT_API_ATTRS int AddCarry(int position = 0, int carry = 1) {
+ for (; position < digits_; ++position) {
+ Digit v{digit_[position] + carry};
+ if (v < radix) {
+ digit_[position] = v;
+ return 0;
+ }
+ digit_[position] = v - radix;
+ carry = 1;
+ }
+ if (digits_ < digitLimit_) {
+ digit_[digits_++] = carry;
+ return 0;
+ }
+ Normalize();
+ if (digits_ < digitLimit_) {
+ digit_[digits_++] = carry;
+ return 0;
+ }
+ return carry;
+ }
+
+ RT_API_ATTRS void Decrement() {
+ for (int j{0}; digit_[j]-- == 0; ++j) {
+ digit_[j] = radix - 1;
+ }
+ }
+
+ template <int N> RT_API_ATTRS int MultiplyByHelper(int carry = 0) {
+ for (int j{0}; j < digits_; ++j) {
+ auto v{N * digit_[j] + carry};
+ carry = v / radix;
+ digit_[j] = v - carry * radix; // i.e., v % radix
+ }
+ return carry;
+ }
+
+ template <int N> RT_API_ATTRS int MultiplyBy(int carry = 0) {
+ if (int newCarry{MultiplyByHelper<N>(carry)}) {
+ return AddCarry(digits_, newCarry);
+ } else {
+ return 0;
+ }
+ }
+
+ template <int N> RT_API_ATTRS int MultiplyWithoutNormalization() {
+ if (int carry{MultiplyByHelper<N>(0)}) {
+ if (digits_ < digitLimit_) {
+ digit_[digits_++] = carry;
+ return 0;
+ } else {
+ return carry;
+ }
+ } else {
+ return 0;
+ }
+ }
+
+ RT_API_ATTRS void LoseLeastSignificantDigit(); // with rounding
+
+ RT_API_ATTRS void PushCarry(int carry) {
+ if (digits_ == maxDigits && RemoveLeastOrderZeroDigits() == 0) {
+ LoseLeastSignificantDigit();
+ digit_[digits_ - 1] += carry;
+ } else {
+ digit_[digits_++] = carry;
+ }
+ }
+
+ // Adds another number and then divides by two.
+ // Assumes same exponent and sign.
+ // Returns true when the result has effectively been rounded down.
+ RT_API_ATTRS bool Mean(const BigRadixFloatingPointNumber &);
+
+ // Parses a floating-point number; leaves the pointer reference
+ // argument pointing at the next character after what was recognized.
+ // The "end" argument can be left null if the caller is sure that the
+ // string is properly terminated with an addressable character that
+ // can't be in a valid floating-point character.
+ RT_API_ATTRS bool ParseNumber(const char *&, bool &inexact, const char *end);
+
+ using Raw = typename Real::RawType;
+ constexpr RT_API_ATTRS Raw SignBit() const {
+ return Raw{isNegative_} << (Real::bits - 1);
+ }
+ constexpr RT_API_ATTRS Raw Infinity() const {
+ Raw result{static_cast<Raw>(Real::maxExponent)};
+ result <<= Real::significandBits;
+ result |= SignBit();
+ if constexpr (Real::bits == 80) { // x87
+ result |= Raw{1} << 63;
+ }
+ return result;
+ }
+ constexpr RT_API_ATTRS Raw NaN(bool isQuiet = true) {
+ Raw result{Real::maxExponent};
+ result <<= Real::significandBits;
+ result |= SignBit();
+ if constexpr (Real::bits == 80) { // x87
+ result |= Raw{isQuiet ? 3u : 2u} << 62;
+ } else {
+ Raw quiet{isQuiet ? Raw{2} : Raw{1}};
+ quiet <<= Real::significandBits - 2;
+ result |= quiet;
+ }
+ return result;
+ }
+ constexpr RT_API_ATTRS Raw HUGE() const {
+ Raw result{static_cast<Raw>(Real::maxExponent)};
+ result <<= Real::significandBits;
+ result |= SignBit();
+ return result - 1; // decrement exponent, set all significand bits
+ }
+
+ Digit digit_[maxDigits]; // in little-endian order: digit_[0] is LSD
+ int digits_{0}; // # of elements in digit_[] array; zero when zero
+ int digitLimit_{maxDigits}; // precision clamp
+ int exponent_{0}; // signed power of ten
+ bool isNegative_{false};
+ enum FortranRounding rounding_ { RoundNearest };
+};
+} // namespace Fortran::decimal
+#endif
diff --git a/contrib/libs/llvm/flang-rt/flang/lib/Decimal/binary-to-decimal.cpp b/contrib/libs/llvm/flang-rt/flang/lib/Decimal/binary-to-decimal.cpp
new file mode 100644
index 00000000000..b64865e95df
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/lib/Decimal/binary-to-decimal.cpp
@@ -0,0 +1,392 @@
+//===-- lib/Decimal/binary-to-decimal.cpp ---------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "big-radix-floating-point.h"
+#include "flang/Decimal/decimal.h"
+#include <cassert>
+#include <cfloat>
+#include <string>
+
+namespace Fortran::decimal {
+
+template <int PREC, int LOG10RADIX>
+BigRadixFloatingPointNumber<PREC, LOG10RADIX>::BigRadixFloatingPointNumber(
+ BinaryFloatingPointNumber<PREC> x, enum FortranRounding rounding)
+ : rounding_{rounding} {
+ bool negative{x.IsNegative()};
+ if (x.IsZero()) {
+ isNegative_ = negative;
+ return;
+ }
+ if (negative) {
+ x.Negate();
+ }
+ int twoPow{x.UnbiasedExponent()};
+ twoPow -= x.bits - 1;
+ if (!x.isImplicitMSB) {
+ ++twoPow;
+ }
+ int lshift{x.exponentBits};
+ if (twoPow <= -lshift) {
+ twoPow += lshift;
+ lshift = 0;
+ } else if (twoPow < 0) {
+ lshift += twoPow;
+ twoPow = 0;
+ }
+ auto word{x.Fraction()};
+ word <<= lshift;
+ SetTo(word);
+ isNegative_ = negative;
+
+ // The significand is now encoded in *this as an integer (D) and
+ // decimal exponent (E): x = D * 10.**E * 2.**twoPow
+ // twoPow can be positive or negative.
+ // The goal now is to get twoPow up or down to zero, leaving us with
+ // only decimal digits and decimal exponent. This is done by
+ // fast multiplications and divisions of D by 2 and 5.
+
+ // (5*D) * 10.**E * 2.**twoPow -> D * 10.**(E+1) * 2.**(twoPow-1)
+ for (; twoPow > 0 && IsDivisibleBy<5>(); --twoPow) {
+ DivideBy<5>();
+ ++exponent_;
+ }
+
+ int overflow{0};
+ for (; twoPow >= 9; twoPow -= 9) {
+ // D * 10.**E * 2.**twoPow -> (D*(2**9)) * 10.**E * 2.**(twoPow-9)
+ overflow |= MultiplyBy<512>();
+ }
+ for (; twoPow >= 3; twoPow -= 3) {
+ // D * 10.**E * 2.**twoPow -> (D*(2**3)) * 10.**E * 2.**(twoPow-3)
+ overflow |= MultiplyBy<8>();
+ }
+ for (; twoPow > 0; --twoPow) {
+ // D * 10.**E * 2.**twoPow -> (2*D) * 10.**E * 2.**(twoPow-1)
+ overflow |= MultiplyBy<2>();
+ }
+
+ overflow |= DivideByPowerOfTwoInPlace(-twoPow);
+ assert(overflow == 0);
+ Normalize();
+}
+
+template <int PREC, int LOG10RADIX>
+ConversionToDecimalResult
+BigRadixFloatingPointNumber<PREC, LOG10RADIX>::ConvertToDecimal(char *buffer,
+ std::size_t n, enum DecimalConversionFlags flags, int maxDigits) const {
+ if (n < static_cast<std::size_t>(3 + digits_ * LOG10RADIX)) {
+ return {nullptr, 0, 0, Overflow};
+ }
+ char *start{buffer};
+ if (isNegative_) {
+ *start++ = '-';
+ } else if (flags & AlwaysSign) {
+ *start++ = '+';
+ }
+ if (IsZero()) {
+ *start++ = '0';
+ *start = '\0';
+ return {buffer, static_cast<std::size_t>(start - buffer), 0, Exact};
+ }
+ char *p{start};
+ static_assert((LOG10RADIX % 2) == 0, "radix not a power of 100");
+ static const char lut[] = "0001020304050607080910111213141516171819"
+ "2021222324252627282930313233343536373839"
+ "4041424344454647484950515253545556575859"
+ "6061626364656667686970717273747576777879"
+ "8081828384858687888990919293949596979899";
+ // Treat the MSD specially: don't emit leading zeroes.
+ Digit dig{digit_[digits_ - 1]};
+ char stack[LOG10RADIX], *sp{stack};
+ for (int k{0}; k < log10Radix; k += 2) {
+ Digit newDig{dig / 100};
+ auto d{static_cast<std::uint32_t>(dig) -
+ std::uint32_t{100} * static_cast<std::uint32_t>(newDig)};
+ dig = newDig;
+ const char *q{lut + d + d};
+ *sp++ = q[1];
+ *sp++ = q[0];
+ }
+ while (sp > stack && sp[-1] == '0') {
+ --sp;
+ }
+ while (sp > stack) {
+ *p++ = *--sp;
+ }
+ for (int j{digits_ - 1}; j-- > 0;) {
+ Digit dig{digit_[j]};
+ char *reverse{p += log10Radix};
+ for (int k{0}; k < log10Radix; k += 2) {
+ Digit newDig{dig / 100};
+ auto d{static_cast<std::uint32_t>(dig) -
+ std::uint32_t{100} * static_cast<std::uint32_t>(newDig)};
+ dig = newDig;
+ const char *q{lut + d + d};
+ *--reverse = q[1];
+ *--reverse = q[0];
+ }
+ }
+ // Adjust exponent so the effective decimal point is to
+ // the left of the first digit.
+ int expo = exponent_ + p - start;
+ // Trim trailing zeroes.
+ while (p[-1] == '0') {
+ --p;
+ }
+ char *end{start + maxDigits};
+ if (maxDigits == 0) {
+ p = end;
+ }
+ if (p <= end) {
+ *p = '\0';
+ return {buffer, static_cast<std::size_t>(p - buffer), expo, Exact};
+ } else {
+ // Apply a digit limit, possibly with rounding.
+ bool incr{false};
+ switch (rounding_) {
+ case RoundNearest:
+ incr = *end > '5' ||
+ (*end == '5' && (p > end + 1 || ((end[-1] - '0') & 1) != 0));
+ break;
+ case RoundUp:
+ incr = !isNegative_;
+ break;
+ case RoundDown:
+ incr = isNegative_;
+ break;
+ case RoundToZero:
+ break;
+ case RoundCompatible:
+ incr = *end >= '5';
+ break;
+ }
+ p = end;
+ if (incr) {
+ while (p > start && p[-1] == '9') {
+ --p;
+ }
+ if (p == start) {
+ *p++ = '1';
+ ++expo;
+ } else {
+ ++p[-1];
+ }
+ }
+
+ *p = '\0';
+ return {buffer, static_cast<std::size_t>(p - buffer), expo, Inexact};
+ }
+}
+
+template <int PREC, int LOG10RADIX>
+bool BigRadixFloatingPointNumber<PREC, LOG10RADIX>::Mean(
+ const BigRadixFloatingPointNumber &that) {
+ while (digits_ < that.digits_) {
+ digit_[digits_++] = 0;
+ }
+ int carry{0};
+ for (int j{0}; j < that.digits_; ++j) {
+ Digit v{digit_[j] + that.digit_[j] + carry};
+ if (v >= radix) {
+ digit_[j] = v - radix;
+ carry = 1;
+ } else {
+ digit_[j] = v;
+ carry = 0;
+ }
+ }
+ if (carry != 0) {
+ AddCarry(that.digits_, carry);
+ }
+ return DivideBy<2>() != 0;
+}
+
+template <int PREC, int LOG10RADIX>
+void BigRadixFloatingPointNumber<PREC, LOG10RADIX>::Minimize(
+ BigRadixFloatingPointNumber &&less, BigRadixFloatingPointNumber &&more) {
+ int leastExponent{exponent_};
+ if (less.exponent_ < leastExponent) {
+ leastExponent = less.exponent_;
+ }
+ if (more.exponent_ < leastExponent) {
+ leastExponent = more.exponent_;
+ }
+ while (exponent_ > leastExponent) {
+ --exponent_;
+ MultiplyBy<10>();
+ }
+ while (less.exponent_ > leastExponent) {
+ --less.exponent_;
+ less.MultiplyBy<10>();
+ }
+ while (more.exponent_ > leastExponent) {
+ --more.exponent_;
+ more.MultiplyBy<10>();
+ }
+ if (less.Mean(*this)) {
+ less.AddCarry(); // round up
+ }
+ if (!more.Mean(*this)) {
+ more.Decrement(); // round down
+ }
+ while (less.digits_ < more.digits_) {
+ less.digit_[less.digits_++] = 0;
+ }
+ while (more.digits_ < less.digits_) {
+ more.digit_[more.digits_++] = 0;
+ }
+ int digits{more.digits_};
+ int same{0};
+ while (same < digits &&
+ less.digit_[digits - 1 - same] == more.digit_[digits - 1 - same]) {
+ ++same;
+ }
+ if (same == digits) {
+ return;
+ }
+ digits_ = same + 1;
+ int offset{digits - digits_};
+ exponent_ += offset * log10Radix;
+ for (int j{0}; j < digits_; ++j) {
+ digit_[j] = more.digit_[j + offset];
+ }
+ Digit least{less.digit_[offset]};
+ Digit my{digit_[0]};
+ while (true) {
+ Digit q{my / 10u};
+ Digit r{my - 10 * q};
+ Digit lq{least / 10u};
+ Digit lr{least - 10 * lq};
+ if (r != 0 && lq == q) {
+ Digit sub{(r - lr) >> 1};
+ digit_[0] -= sub;
+ break;
+ } else {
+ least = lq;
+ my = q;
+ DivideBy<10>();
+ ++exponent_;
+ }
+ }
+ Normalize();
+}
+
+template <int PREC>
+ConversionToDecimalResult ConvertToDecimal(char *buffer, std::size_t size,
+ enum DecimalConversionFlags flags, int digits,
+ enum FortranRounding rounding, BinaryFloatingPointNumber<PREC> x) {
+ if (x.IsNaN()) {
+ return {"NaN", 3, 0, Invalid};
+ } else if (x.IsInfinite()) {
+ if (x.IsNegative()) {
+ return {"-Inf", 4, 0, Exact};
+ } else if (flags & AlwaysSign) {
+ return {"+Inf", 4, 0, Exact};
+ } else {
+ return {"Inf", 3, 0, Exact};
+ }
+ } else {
+ using Big = BigRadixFloatingPointNumber<PREC>;
+ Big number{x, rounding};
+ if ((flags & Minimize) && !x.IsZero()) {
+ // To emit the fewest decimal digits necessary to represent the value
+ // in such a way that decimal-to-binary conversion to the same format
+ // with a fixed assumption about rounding will return the same binary
+ // value, we also perform binary-to-decimal conversion on the two
+ // binary values immediately adjacent to this one, use them to identify
+ // the bounds of the range of decimal values that will map back to the
+ // original binary value, and find a (not necessary unique) shortest
+ // decimal sequence in that range.
+ using Binary = typename Big::Real;
+ Binary less{x};
+ less.Previous();
+ Binary more{x};
+ if (!x.IsMaximalFiniteMagnitude()) {
+ more.Next();
+ }
+ number.Minimize(Big{less, rounding}, Big{more, rounding});
+ }
+ return number.ConvertToDecimal(buffer, size, flags, digits);
+ }
+}
+
+template ConversionToDecimalResult ConvertToDecimal<8>(char *, std::size_t,
+ enum DecimalConversionFlags, int, enum FortranRounding,
+ BinaryFloatingPointNumber<8>);
+template ConversionToDecimalResult ConvertToDecimal<11>(char *, std::size_t,
+ enum DecimalConversionFlags, int, enum FortranRounding,
+ BinaryFloatingPointNumber<11>);
+template ConversionToDecimalResult ConvertToDecimal<24>(char *, std::size_t,
+ enum DecimalConversionFlags, int, enum FortranRounding,
+ BinaryFloatingPointNumber<24>);
+template ConversionToDecimalResult ConvertToDecimal<53>(char *, std::size_t,
+ enum DecimalConversionFlags, int, enum FortranRounding,
+ BinaryFloatingPointNumber<53>);
+template ConversionToDecimalResult ConvertToDecimal<64>(char *, std::size_t,
+ enum DecimalConversionFlags, int, enum FortranRounding,
+ BinaryFloatingPointNumber<64>);
+template ConversionToDecimalResult ConvertToDecimal<113>(char *, std::size_t,
+ enum DecimalConversionFlags, int, enum FortranRounding,
+ BinaryFloatingPointNumber<113>);
+
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+ConversionToDecimalResult ConvertFloatToDecimal(char *buffer, std::size_t size,
+ enum DecimalConversionFlags flags, int digits,
+ enum FortranRounding rounding, float x) {
+ return Fortran::decimal::ConvertToDecimal(buffer, size, flags, digits,
+ rounding, Fortran::decimal::BinaryFloatingPointNumber<24>(x));
+}
+
+ConversionToDecimalResult ConvertDoubleToDecimal(char *buffer, std::size_t size,
+ enum DecimalConversionFlags flags, int digits,
+ enum FortranRounding rounding, double x) {
+ return Fortran::decimal::ConvertToDecimal(buffer, size, flags, digits,
+ rounding, Fortran::decimal::BinaryFloatingPointNumber<53>(x));
+}
+
+#if LDBL_MANT_DIG == 64
+ConversionToDecimalResult ConvertLongDoubleToDecimal(char *buffer,
+ std::size_t size, enum DecimalConversionFlags flags, int digits,
+ enum FortranRounding rounding, long double x) {
+ return Fortran::decimal::ConvertToDecimal(buffer, size, flags, digits,
+ rounding, Fortran::decimal::BinaryFloatingPointNumber<64>(x));
+}
+#elif LDBL_MANT_DIG == 113
+ConversionToDecimalResult ConvertLongDoubleToDecimal(char *buffer,
+ std::size_t size, enum DecimalConversionFlags flags, int digits,
+ enum FortranRounding rounding, long double x) {
+ return Fortran::decimal::ConvertToDecimal(buffer, size, flags, digits,
+ rounding, Fortran::decimal::BinaryFloatingPointNumber<113>(x));
+}
+#endif
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+
+template <int PREC, int LOG10RADIX>
+template <typename STREAM>
+STREAM &BigRadixFloatingPointNumber<PREC, LOG10RADIX>::Dump(STREAM &o) const {
+ if (isNegative_) {
+ o << '-';
+ }
+ o << "10**(" << exponent_ << ") * ... (rounding "
+ << static_cast<int>(rounding_) << ")\n";
+ for (int j{digits_}; --j >= 0;) {
+ std::string str{std::to_string(digit_[j])};
+ o << std::string(20 - str.size(), ' ') << str << " [" << j << ']';
+ if (j + 1 == digitLimit_) {
+ o << " (limit)";
+ }
+ o << '\n';
+ }
+ return o;
+}
+} // namespace Fortran::decimal
diff --git a/contrib/libs/llvm/flang-rt/flang/lib/Decimal/decimal-to-binary.cpp b/contrib/libs/llvm/flang-rt/flang/lib/Decimal/decimal-to-binary.cpp
new file mode 100644
index 00000000000..94c51774237
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/flang/lib/Decimal/decimal-to-binary.cpp
@@ -0,0 +1,564 @@
+//===-- lib/Decimal/decimal-to-binary.cpp ---------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "big-radix-floating-point.h"
+#include "flang/Common/bit-population-count.h"
+#include "flang/Common/leading-zero-bit-count.h"
+#include "flang/Decimal/binary-floating-point.h"
+#include "flang/Decimal/decimal.h"
+#include "flang/Runtime/freestanding-tools.h"
+#include <cinttypes>
+#include <cstring>
+#include <utility>
+
+// Some environments, viz. glibc 2.17 and *BSD, allow the macro HUGE
+// to leak out of <math.h>.
+#undef HUGE
+
+namespace Fortran::decimal {
+
+template <int PREC, int LOG10RADIX>
+bool BigRadixFloatingPointNumber<PREC, LOG10RADIX>::ParseNumber(
+ const char *&p, bool &inexact, const char *end) {
+ SetToZero();
+ if (end && p >= end) {
+ return false;
+ }
+ // Skip leading spaces
+ for (; p != end && *p == ' '; ++p) {
+ }
+ if (p == end) {
+ return false;
+ }
+ const char *q{p};
+ isNegative_ = *q == '-';
+ if (*q == '-' || *q == '+') {
+ ++q;
+ }
+ const char *start{q};
+ for (; q != end && *q == '0'; ++q) {
+ }
+ const char *firstDigit{q};
+ for (; q != end && *q >= '0' && *q <= '9'; ++q) {
+ }
+ const char *point{nullptr};
+ if (q != end && *q == '.') {
+ point = q;
+ for (++q; q != end && *q >= '0' && *q <= '9'; ++q) {
+ }
+ }
+ if (q == start || (q == start + 1 && start == point)) {
+ return false; // require at least one digit
+ }
+ // There's a valid number here; set the reference argument to point to
+ // the first character afterward, which might be an exponent part.
+ p = q;
+ // Strip off trailing zeroes
+ if (point) {
+ while (q[-1] == '0') {
+ --q;
+ }
+ if (q[-1] == '.') {
+ point = nullptr;
+ --q;
+ }
+ }
+ if (!point) {
+ while (q > firstDigit && q[-1] == '0') {
+ --q;
+ ++exponent_;
+ }
+ }
+ // Trim any excess digits
+ const char *limit{firstDigit + maxDigits * log10Radix + (point != nullptr)};
+ if (q > limit) {
+ inexact = true;
+ if (point >= limit) {
+ q = point;
+ point = nullptr;
+ }
+ if (!point) {
+ exponent_ += q - limit;
+ }
+ q = limit;
+ }
+ if (point) {
+ exponent_ -= static_cast<int>(q - point - 1);
+ }
+ if (q == firstDigit) {
+ exponent_ = 0; // all zeros
+ }
+ // Rack the decimal digits up into big Digits.
+ for (auto times{radix}; q-- > firstDigit;) {
+ if (*q != '.') {
+ if (times == radix) {
+ digit_[digits_++] = *q - '0';
+ times = 10;
+ } else {
+ digit_[digits_ - 1] += times * (*q - '0');
+ times *= 10;
+ }
+ }
+ }
+ // Look for an optional exponent field.
+ if (p == end) {
+ return true;
+ }
+ q = p;
+ switch (*q) {
+ case 'e':
+ case 'E':
+ case 'd':
+ case 'D':
+ case 'q':
+ case 'Q': {
+ if (++q == end) {
+ break;
+ }
+ bool negExpo{*q == '-'};
+ if (*q == '-' || *q == '+') {
+ ++q;
+ }
+ if (q != end && *q >= '0' && *q <= '9') {
+ int expo{0};
+ for (; q != end && *q == '0'; ++q) {
+ }
+ const char *expDig{q};
+ for (; q != end && *q >= '0' && *q <= '9'; ++q) {
+ expo = 10 * expo + *q - '0';
+ }
+ if (q >= expDig + 8) {
+ // There's a ridiculous number of nonzero exponent digits.
+ // The decimal->binary conversion routine will cope with
+ // returning 0 or Inf, but we must ensure that "expo" didn't
+ // overflow back around to something legal.
+ expo = 10 * Real::decimalRange;
+ exponent_ = 0;
+ }
+ p = q; // exponent is valid; advance the termination pointer
+ if (negExpo) {
+ exponent_ -= expo;
+ } else {
+ exponent_ += expo;
+ }
+ }
+ } break;
+ default:
+ break;
+ }
+ return true;
+}
+
+template <int PREC, int LOG10RADIX>
+void BigRadixFloatingPointNumber<PREC,
+ LOG10RADIX>::LoseLeastSignificantDigit() {
+ Digit LSD{digit_[0]};
+ for (int j{0}; j < digits_ - 1; ++j) {
+ digit_[j] = digit_[j + 1];
+ }
+ digit_[digits_ - 1] = 0;
+ bool incr{false};
+ switch (rounding_) {
+ case RoundNearest:
+ incr = LSD > radix / 2 || (LSD == radix / 2 && digit_[0] % 2 != 0);
+ break;
+ case RoundUp:
+ incr = LSD > 0 && !isNegative_;
+ break;
+ case RoundDown:
+ incr = LSD > 0 && isNegative_;
+ break;
+ case RoundToZero:
+ break;
+ case RoundCompatible:
+ incr = LSD >= radix / 2;
+ break;
+ }
+ for (int j{0}; (digit_[j] += incr) == radix; ++j) {
+ digit_[j] = 0;
+ }
+}
+
+// This local utility class represents an unrounded nonnegative
+// binary floating-point value with an unbiased (i.e., signed)
+// binary exponent, an integer value (not a fraction) with an implied
+// binary point to its *right*, and some guard bits for rounding.
+template <int PREC> class IntermediateFloat {
+public:
+ static constexpr int precision{PREC};
+ using IntType = common::HostUnsignedIntType<precision>;
+ static constexpr IntType topBit{IntType{1} << (precision - 1)};
+ static constexpr IntType mask{topBit + (topBit - 1)};
+
+ RT_API_ATTRS IntermediateFloat() {}
+ IntermediateFloat(const IntermediateFloat &) = default;
+
+ // Assumes that exponent_ is valid on entry, and may increment it.
+ // Returns the number of guard_ bits that have been determined.
+ template <typename UINT> RT_API_ATTRS bool SetTo(UINT n) {
+ static constexpr int nBits{CHAR_BIT * sizeof n};
+ if constexpr (precision >= nBits) {
+ value_ = n;
+ guard_ = 0;
+ return 0;
+ } else {
+ int shift{common::BitsNeededFor(n) - precision};
+ if (shift <= 0) {
+ value_ = n;
+ guard_ = 0;
+ return 0;
+ } else {
+ value_ = n >> shift;
+ exponent_ += shift;
+ n <<= nBits - shift;
+ guard_ = (n >> (nBits - guardBits)) | ((n << guardBits) != 0);
+ return shift;
+ }
+ }
+ }
+
+ RT_API_ATTRS void ShiftIn(int bit = 0) { value_ = value_ + value_ + bit; }
+ RT_API_ATTRS bool IsFull() const { return value_ >= topBit; }
+ RT_API_ATTRS void AdjustExponent(int by) { exponent_ += by; }
+ RT_API_ATTRS void SetGuard(int g) {
+ guard_ |= (static_cast<GuardType>(g & 6) << (guardBits - 3)) | (g & 1);
+ }
+
+ RT_API_ATTRS ConversionToBinaryResult<PREC> ToBinary(
+ bool isNegative, FortranRounding) const;
+
+private:
+ static constexpr int guardBits{3}; // guard, round, sticky
+ using GuardType = int;
+ static constexpr GuardType oneHalf{GuardType{1} << (guardBits - 1)};
+
+ IntType value_{0};
+ GuardType guard_{0};
+ int exponent_{0};
+};
+
+// The standard says that these overflow cases round to "representable"
+// numbers, and some popular compilers interpret that to mean +/-HUGE()
+// rather than +/-Inf.
+static inline RT_API_ATTRS constexpr bool RoundOverflowToHuge(
+ enum FortranRounding rounding, bool isNegative) {
+ return rounding == RoundToZero || (!isNegative && rounding == RoundDown) ||
+ (isNegative && rounding == RoundUp);
+}
+
+template <int PREC>
+ConversionToBinaryResult<PREC> IntermediateFloat<PREC>::ToBinary(
+ bool isNegative, FortranRounding rounding) const {
+ using Binary = BinaryFloatingPointNumber<PREC>;
+ // Create a fraction with a binary point to the left of the integer
+ // value_, and bias the exponent.
+ IntType fraction{value_};
+ GuardType guard{guard_};
+ int expo{exponent_ + Binary::exponentBias + (precision - 1)};
+ while (expo < 1 && (fraction > 0 || guard > oneHalf)) {
+ guard = (guard & 1) | (guard >> 1) |
+ ((static_cast<GuardType>(fraction) & 1) << (guardBits - 1));
+ fraction >>= 1;
+ ++expo;
+ }
+ int flags{Exact};
+ if (guard != 0) {
+ flags |= Inexact;
+ }
+ if (fraction == 0) {
+ if (guard <= oneHalf) {
+ if ((!isNegative && rounding == RoundUp) ||
+ (isNegative && rounding == RoundDown)) {
+ // round to least nonzero value
+ expo = 0;
+ } else { // round to zero
+ if (guard != 0) {
+ flags |= Underflow;
+ }
+ Binary zero;
+ if (isNegative) {
+ zero.Negate();
+ }
+ return {
+ std::move(zero), static_cast<enum ConversionResultFlags>(flags)};
+ }
+ }
+ } else {
+ // The value is nonzero; normalize it.
+ while (fraction < topBit && expo > 1) {
+ --expo;
+ fraction = fraction * 2 + (guard >> (guardBits - 2));
+ guard =
+ (((guard >> (guardBits - 2)) & 1) << (guardBits - 1)) | (guard & 1);
+ }
+ }
+ // Apply rounding
+ bool incr{false};
+ switch (rounding) {
+ case RoundNearest:
+ incr = guard > oneHalf || (guard == oneHalf && (fraction & 1));
+ break;
+ case RoundUp:
+ incr = guard != 0 && !isNegative;
+ break;
+ case RoundDown:
+ incr = guard != 0 && isNegative;
+ break;
+ case RoundToZero:
+ break;
+ case RoundCompatible:
+ incr = guard >= oneHalf;
+ break;
+ }
+ if (incr) {
+ if (fraction == mask) {
+ // rounding causes a carry
+ ++expo;
+ fraction = topBit;
+ } else {
+ ++fraction;
+ }
+ }
+ if (expo == 1 && fraction < topBit) {
+ expo = 0; // subnormal
+ flags |= Underflow;
+ } else if (expo == 0) {
+ flags |= Underflow;
+ } else if (expo >= Binary::maxExponent) {
+ if (RoundOverflowToHuge(rounding, isNegative)) {
+ expo = Binary::maxExponent - 1;
+ fraction = mask;
+ } else { // Inf
+ expo = Binary::maxExponent;
+ flags |= Overflow;
+ if constexpr (Binary::bits == 80) { // x87
+ fraction = IntType{1} << 63;
+ } else {
+ fraction = 0;
+ }
+ }
+ }
+ using Raw = typename Binary::RawType;
+ Raw raw = static_cast<Raw>(isNegative) << (Binary::bits - 1);
+ raw |= static_cast<Raw>(expo) << Binary::significandBits;
+ if constexpr (Binary::isImplicitMSB) {
+ fraction &= ~topBit;
+ }
+ raw |= fraction;
+ return {Binary(raw), static_cast<enum ConversionResultFlags>(flags)};
+}
+
+template <int PREC, int LOG10RADIX>
+ConversionToBinaryResult<PREC>
+BigRadixFloatingPointNumber<PREC, LOG10RADIX>::ConvertToBinary() {
+ // On entry, *this holds a multi-precision integer value in a radix of a
+ // large power of ten. Its radix point is defined to be to the right of its
+ // digits, and "exponent_" is the power of ten by which it is to be scaled.
+ Normalize();
+ if (digits_ == 0) { // zero value
+ return {Real{SignBit()}};
+ }
+ // The value is not zero: x = D. * 10.**E
+ // Shift our perspective on the radix (& decimal) point so that
+ // it sits to the *left* of the digits: i.e., x = .D * 10.**E
+ exponent_ += digits_ * log10Radix;
+ // Sanity checks for ridiculous exponents
+ static constexpr int crazy{2 * Real::decimalRange + log10Radix};
+ if (exponent_ < -crazy) {
+ enum ConversionResultFlags flags {
+ static_cast<enum ConversionResultFlags>(Inexact | Underflow)
+ };
+ if ((!isNegative_ && rounding_ == RoundUp) ||
+ (isNegative_ && rounding_ == RoundDown)) {
+ // return least nonzero value
+ return {Real{Raw{1} | SignBit()}, flags};
+ } else { // underflow to +/-0.
+ return {Real{SignBit()}, flags};
+ }
+ } else if (exponent_ > crazy) { // overflow to +/-HUGE() or +/-Inf
+ if (RoundOverflowToHuge(rounding_, isNegative_)) {
+ return {Real{HUGE()}};
+ } else {
+ return {Real{Infinity()}, Overflow};
+ }
+ }
+ // Apply any negative decimal exponent by multiplication
+ // by a power of two, adjusting the binary exponent to compensate.
+ IntermediateFloat<PREC> f;
+ while (exponent_ < log10Radix) {
+ // x = 0.D * 10.**E * 2.**(f.ex) -> 512 * 0.D * 10.**E * 2.**(f.ex-9)
+ f.AdjustExponent(-9);
+ digitLimit_ = digits_;
+ if (int carry{MultiplyWithoutNormalization<512>()}) {
+ // x = c.D * 10.**E * 2.**(f.ex) -> .cD * 10.**(E+16) * 2.**(f.ex)
+ PushCarry(carry);
+ exponent_ += log10Radix;
+ }
+ }
+ // Apply any positive decimal exponent greater than
+ // is needed to treat the topmost digit as an integer
+ // part by multiplying by 10 or 10000 repeatedly.
+ while (exponent_ > log10Radix) {
+ digitLimit_ = digits_;
+ int carry;
+ if (exponent_ >= log10Radix + 4) {
+ // x = 0.D * 10.**E * 2.**(f.ex) -> 625 * .D * 10.**(E-4) * 2.**(f.ex+4)
+ exponent_ -= 4;
+ carry = MultiplyWithoutNormalization<(5 * 5 * 5 * 5)>();
+ f.AdjustExponent(4);
+ } else {
+ // x = 0.D * 10.**E * 2.**(f.ex) -> 5 * .D * 10.**(E-1) * 2.**(f.ex+1)
+ --exponent_;
+ carry = MultiplyWithoutNormalization<5>();
+ f.AdjustExponent(1);
+ }
+ if (carry != 0) {
+ // x = c.D * 10.**E * 2.**(f.ex) -> .cD * 10.**(E+16) * 2.**(f.ex)
+ PushCarry(carry);
+ exponent_ += log10Radix;
+ }
+ }
+ // So exponent_ is now log10Radix, meaning that the
+ // MSD can be taken as an integer part and transferred
+ // to the binary result.
+ // x = .jD * 10.**16 * 2.**(f.ex) -> .D * j * 2.**(f.ex)
+ int guardShift{f.SetTo(digit_[--digits_])};
+ // Transfer additional bits until the result is normal.
+ digitLimit_ = digits_;
+ while (!f.IsFull()) {
+ // x = ((b.D)/2) * j * 2.**(f.ex) -> .D * (2j + b) * 2.**(f.ex-1)
+ f.AdjustExponent(-1);
+ std::uint32_t carry = MultiplyWithoutNormalization<2>();
+ f.ShiftIn(carry);
+ }
+ // Get the next few bits for rounding. Allow for some guard bits
+ // that may have already been set in f.SetTo() above.
+ int guard{0};
+ if (guardShift == 0) {
+ guard = MultiplyWithoutNormalization<4>();
+ } else if (guardShift == 1) {
+ guard = MultiplyWithoutNormalization<2>();
+ }
+ guard = guard + guard + !IsZero();
+ f.SetGuard(guard);
+ return f.ToBinary(isNegative_, rounding_);
+}
+
+template <int PREC, int LOG10RADIX>
+ConversionToBinaryResult<PREC>
+BigRadixFloatingPointNumber<PREC, LOG10RADIX>::ConvertToBinary(
+ const char *&p, const char *limit) {
+ bool inexact{false};
+ if (ParseNumber(p, inexact, limit)) {
+ auto result{ConvertToBinary()};
+ if (inexact) {
+ result.flags =
+ static_cast<enum ConversionResultFlags>(result.flags | Inexact);
+ }
+ return result;
+ } else {
+ // Could not parse a decimal floating-point number. p has been
+ // advanced over any leading spaces. Most Fortran compilers set
+ // the sign bit for -NaN.
+ const char *q{p};
+ if (!limit || q < limit) {
+ isNegative_ = *q == '-';
+ if (isNegative_ || *q == '+') {
+ ++q;
+ }
+ }
+ if ((!limit || limit >= q + 3) && runtime::toupper(q[0]) == 'N' &&
+ runtime::toupper(q[1]) == 'A' && runtime::toupper(q[2]) == 'N') {
+ // NaN
+ p = q + 3;
+ bool isQuiet{true};
+ if ((!limit || p < limit) && *p == '(') {
+ int depth{1};
+ do {
+ ++p;
+ if (limit && p >= limit) {
+ // Invalid input
+ return {Real{NaN(false)}, Invalid};
+ } else if (*p == '(') {
+ ++depth;
+ } else if (*p == ')') {
+ --depth;
+ } else if (*p != ' ') {
+ // Implementation dependent, but other compilers
+ // all return quiet NaNs.
+ }
+ } while (depth > 0);
+ ++p;
+ }
+ return {Real{NaN(isQuiet)}};
+ } else { // Inf?
+ if ((!limit || limit >= q + 3) && runtime::toupper(q[0]) == 'I' &&
+ runtime::toupper(q[1]) == 'N' && runtime::toupper(q[2]) == 'F') {
+ if ((!limit || limit >= q + 8) && runtime::toupper(q[3]) == 'I' &&
+ runtime::toupper(q[4]) == 'N' && runtime::toupper(q[5]) == 'I' &&
+ runtime::toupper(q[6]) == 'T' && runtime::toupper(q[7]) == 'Y') {
+ p = q + 8;
+ } else {
+ p = q + 3;
+ }
+ return {Real{Infinity()}};
+ } else {
+ // Invalid input
+ return {Real{NaN()}, Invalid};
+ }
+ }
+ }
+}
+
+template <int PREC>
+ConversionToBinaryResult<PREC> ConvertToBinary(
+ const char *&p, enum FortranRounding rounding, const char *end) {
+ return BigRadixFloatingPointNumber<PREC>{rounding}.ConvertToBinary(p, end);
+}
+
+template ConversionToBinaryResult<8> ConvertToBinary<8>(
+ const char *&, enum FortranRounding, const char *end);
+template ConversionToBinaryResult<11> ConvertToBinary<11>(
+ const char *&, enum FortranRounding, const char *end);
+template ConversionToBinaryResult<24> ConvertToBinary<24>(
+ const char *&, enum FortranRounding, const char *end);
+template ConversionToBinaryResult<53> ConvertToBinary<53>(
+ const char *&, enum FortranRounding, const char *end);
+template ConversionToBinaryResult<64> ConvertToBinary<64>(
+ const char *&, enum FortranRounding, const char *end);
+template ConversionToBinaryResult<113> ConvertToBinary<113>(
+ const char *&, enum FortranRounding, const char *end);
+
+extern "C" {
+RT_EXT_API_GROUP_BEGIN
+
+enum ConversionResultFlags ConvertDecimalToFloat(
+ const char **p, float *f, enum FortranRounding rounding) {
+ auto result{Fortran::decimal::ConvertToBinary<24>(*p, rounding)};
+ std::memcpy(reinterpret_cast<void *>(f),
+ reinterpret_cast<const void *>(&result.binary), sizeof *f);
+ return result.flags;
+}
+enum ConversionResultFlags ConvertDecimalToDouble(
+ const char **p, double *d, enum FortranRounding rounding) {
+ auto result{Fortran::decimal::ConvertToBinary<53>(*p, rounding)};
+ std::memcpy(reinterpret_cast<void *>(d),
+ reinterpret_cast<const void *>(&result.binary), sizeof *d);
+ return result.flags;
+}
+enum ConversionResultFlags ConvertDecimalToLongDouble(
+ const char **p, long double *ld, enum FortranRounding rounding) {
+ auto result{Fortran::decimal::ConvertToBinary<64>(*p, rounding)};
+ std::memcpy(reinterpret_cast<void *>(ld),
+ reinterpret_cast<const void *>(&result.binary), sizeof *ld);
+ return result.flags;
+}
+
+RT_EXT_API_GROUP_END
+} // extern "C"
+} // namespace Fortran::decimal
diff --git a/contrib/libs/llvm/flang-rt/patches/pr157840-missing-include-cstdlib.patch b/contrib/libs/llvm/flang-rt/patches/pr157840-missing-include-cstdlib.patch
new file mode 100644
index 00000000000..b94984f33f5
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/patches/pr157840-missing-include-cstdlib.patch
@@ -0,0 +1,22 @@
+From e34e6364ce0816b29a52b27873bd0153109e4cc2 Mon Sep 17 00:00:00 2001
+From: Yuriy Chernyshov <[email protected]>
+Date: Wed, 10 Sep 2025 14:04:59 +0200
+Subject: [PATCH] Add missing #include <cstdlib>
+
+std::realloc is declared there
+---
+ flang/include/flang/Runtime/freestanding-tools.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/flang/include/flang/Runtime/freestanding-tools.h b/flang/include/flang/Runtime/freestanding-tools.h
+index 6753b7a24ebe1..7ef7cc74f213b 100644
+--- a/flang/include/flang/Runtime/freestanding-tools.h
++++ b/flang/include/flang/Runtime/freestanding-tools.h
+@@ -13,6 +13,7 @@
+ #include "flang/Runtime/c-or-cpp.h"
+ #include <algorithm>
+ #include <cctype>
++#include <cstdlib>
+ #include <cstring>
+
+ // The file defines a set of utilities/classes that might be
diff --git a/contrib/libs/llvm/flang-rt/patches/pr160096-create-process-w.patch b/contrib/libs/llvm/flang-rt/patches/pr160096-create-process-w.patch
new file mode 100644
index 00000000000..d3f65766f44
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/patches/pr160096-create-process-w.patch
@@ -0,0 +1,31 @@
+From ec9078d051178837e6d6a082ee165cece89b0aa1 Mon Sep 17 00:00:00 2001
+From: Yuriy Chernyshov <[email protected]>
+Date: Mon, 22 Sep 2025 16:15:44 +0300
+Subject: [PATCH] Use CreateProcessW explicitly to improve compatibility
+
+---
+ flang-rt/lib/runtime/execute.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/flang-rt/lib/runtime/execute.cpp b/flang-rt/lib/runtime/execute.cpp
+index f180da846a32c..779e040bebebc 100644
+--- a/flang-rt/lib/runtime/execute.cpp
++++ b/flang-rt/lib/runtime/execute.cpp
+@@ -212,7 +212,7 @@ void RTNAME(ExecuteCommandLine)(const Descriptor &command, bool wait,
+ } else {
+ // Asynchronous mode
+ #ifdef _WIN32
+- STARTUPINFO si;
++ STARTUPINFOW si;
+ PROCESS_INFORMATION pi;
+ ZeroMemory(&si, sizeof(si));
+ si.cb = sizeof(si);
+@@ -234,7 +234,7 @@ void RTNAME(ExecuteCommandLine)(const Descriptor &command, bool wait,
+ }
+ FreeMemory(newCmdWin);
+
+- if (CreateProcess(nullptr, wcmd, nullptr, nullptr, FALSE, 0, nullptr,
++ if (CreateProcessW(nullptr, wcmd, nullptr, nullptr, FALSE, 0, nullptr,
+ nullptr, &si, &pi)) {
+ // Close handles so it will be removed when terminated
+ CloseHandle(pi.hProcess);
diff --git a/contrib/libs/llvm/flang-rt/ya.make b/contrib/libs/llvm/flang-rt/ya.make
new file mode 100644
index 00000000000..692ab5cb888
--- /dev/null
+++ b/contrib/libs/llvm/flang-rt/ya.make
@@ -0,0 +1,100 @@
+# Generated by devtools/yamaker from nixpkgs 24.05.
+
+LIBRARY()
+
+LICENSE(
+ Apache-2.0 WITH LLVM-exception AND
+ NCSA
+)
+
+LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
+
+VERSION(21.1.1)
+
+ORIGINAL_SOURCE(https://github.com/llvm/llvm-project/archive/llvmorg-21.1.1.tar.gz)
+
+ADDINCL(
+ GLOBAL contrib/libs/llvm/flang-rt/flang-rt/include
+ contrib/libs/llvm/flang-rt/flang-rt
+ contrib/libs/llvm/flang-rt/flang/include
+)
+
+NO_COMPILER_WARNINGS()
+
+NO_UTIL()
+
+SRCS(
+ flang-rt/lib/runtime/ISO_Fortran_binding.cpp
+ flang-rt/lib/runtime/allocatable.cpp
+ flang-rt/lib/runtime/allocator-registry.cpp
+ flang-rt/lib/runtime/array-constructor.cpp
+ flang-rt/lib/runtime/assign.cpp
+ flang-rt/lib/runtime/buffer.cpp
+ flang-rt/lib/runtime/character.cpp
+ flang-rt/lib/runtime/command.cpp
+ flang-rt/lib/runtime/complex-powi.cpp
+ flang-rt/lib/runtime/complex-reduction.c
+ flang-rt/lib/runtime/connection.cpp
+ flang-rt/lib/runtime/copy.cpp
+ flang-rt/lib/runtime/derived-api.cpp
+ flang-rt/lib/runtime/derived.cpp
+ flang-rt/lib/runtime/descriptor-io.cpp
+ flang-rt/lib/runtime/descriptor.cpp
+ flang-rt/lib/runtime/dot-product.cpp
+ flang-rt/lib/runtime/edit-input.cpp
+ flang-rt/lib/runtime/edit-output.cpp
+ flang-rt/lib/runtime/environment.cpp
+ flang-rt/lib/runtime/exceptions.cpp
+ flang-rt/lib/runtime/execute.cpp
+ flang-rt/lib/runtime/extensions.cpp
+ flang-rt/lib/runtime/external-unit.cpp
+ flang-rt/lib/runtime/extrema.cpp
+ flang-rt/lib/runtime/file.cpp
+ flang-rt/lib/runtime/findloc.cpp
+ flang-rt/lib/runtime/format.cpp
+ flang-rt/lib/runtime/inquiry.cpp
+ flang-rt/lib/runtime/internal-unit.cpp
+ flang-rt/lib/runtime/io-api-minimal.cpp
+ flang-rt/lib/runtime/io-api.cpp
+ flang-rt/lib/runtime/io-error.cpp
+ flang-rt/lib/runtime/io-stmt.cpp
+ flang-rt/lib/runtime/iostat.cpp
+ flang-rt/lib/runtime/main.cpp
+ flang-rt/lib/runtime/matmul-transpose.cpp
+ flang-rt/lib/runtime/matmul.cpp
+ flang-rt/lib/runtime/memory.cpp
+ flang-rt/lib/runtime/misc-intrinsic.cpp
+ flang-rt/lib/runtime/namelist.cpp
+ flang-rt/lib/runtime/non-tbp-dio.cpp
+ flang-rt/lib/runtime/numeric.cpp
+ flang-rt/lib/runtime/pointer.cpp
+ flang-rt/lib/runtime/product.cpp
+ flang-rt/lib/runtime/pseudo-unit.cpp
+ flang-rt/lib/runtime/ragged.cpp
+ flang-rt/lib/runtime/random.cpp
+ flang-rt/lib/runtime/reduce.cpp
+ flang-rt/lib/runtime/reduction.cpp
+ flang-rt/lib/runtime/stat.cpp
+ flang-rt/lib/runtime/stop.cpp
+ flang-rt/lib/runtime/sum.cpp
+ flang-rt/lib/runtime/support.cpp
+ flang-rt/lib/runtime/temporary-stack.cpp
+ flang-rt/lib/runtime/terminator.cpp
+ flang-rt/lib/runtime/time-intrinsic.cpp
+ flang-rt/lib/runtime/tools.cpp
+ flang-rt/lib/runtime/transformational.cpp
+ flang-rt/lib/runtime/type-code.cpp
+ flang-rt/lib/runtime/type-info.cpp
+ flang-rt/lib/runtime/unit-map.cpp
+ flang-rt/lib/runtime/unit.cpp
+ flang-rt/lib/runtime/utf.cpp
+ flang-rt/lib/runtime/work-queue.cpp
+ flang/lib/Decimal/binary-to-decimal.cpp
+ flang/lib/Decimal/decimal-to-binary.cpp
+)
+
+IF (OS_WINDOWS)
+ LDFLAGS(/LIBPATH:${ARCADIA_ROOT}/build/essentials/flang-empty-runtimes)
+ENDIF()
+
+END()
diff --git a/contrib/libs/utf8proc/.yandex_meta/devtools.licenses.report b/contrib/libs/utf8proc/.yandex_meta/devtools.licenses.report
index f4c23661e1e..a7c0d20482a 100644
--- a/contrib/libs/utf8proc/.yandex_meta/devtools.licenses.report
+++ b/contrib/libs/utf8proc/.yandex_meta/devtools.licenses.report
@@ -84,7 +84,7 @@ BELONGS ya.make
Match type : REFERENCE
Links : http://opensource.org/licenses/mit-license.php, https://spdx.org/licenses/MIT
Files with this license:
- NEWS.md [319:319]
+ NEWS.md [329:329]
KEEP MIT b9f647ef7e29973cc8b999af88006590
BELONGS ya.make
@@ -113,7 +113,7 @@ BELONGS ya.make
KEEP MIT AND Unicode e494dba55af130e3b0d56ff7a74377e3
BELONGS ya.make
-FILE_INCLUDE LICENSE.md found in files: README.md at line 30
+FILE_INCLUDE LICENSE.md found in files: README.md at line 28
Note: matched license text is too long. Read it in the source files.
Scancode info:
Original SPDX id: MIT
@@ -121,11 +121,11 @@ FILE_INCLUDE LICENSE.md found in files: README.md at line 30
Match type : NOTICE
Links : http://opensource.org/licenses/mit-license.php, https://spdx.org/licenses/MIT
Files with this license:
- README.md [25:30]
+ README.md [23:28]
Scancode info:
Original SPDX id: LicenseRef-scancode-unicode
Score : 100.00
Match type : NOTICE
Links : http://unicode.org/, http://unicode.org/copyright.html, https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/unicode.LICENSE
Files with this license:
- README.md [25:30]
+ README.md [23:28]
diff --git a/contrib/libs/utf8proc/.yandex_meta/override.nix b/contrib/libs/utf8proc/.yandex_meta/override.nix
index c1ea2ec638e..6ddffc249d2 100644
--- a/contrib/libs/utf8proc/.yandex_meta/override.nix
+++ b/contrib/libs/utf8proc/.yandex_meta/override.nix
@@ -1,10 +1,10 @@
self: super: with self; rec {
- version = "2.10.0";
+ version = "2.11.0";
src = fetchFromGitHub {
owner = "JuliaStrings";
repo = "utf8proc";
rev = "v${version}";
- hash = "sha256-wmtMo6eBK/xxxkIeJfh5Yb293po9cKK+7WjqNPoxM9g=";
+ hash = "sha256-iNITnxA1cacOBRU/XV22yzjB0XUOCYsaLLLPYLa+AoA=";
};
}
diff --git a/contrib/libs/utf8proc/NEWS.md b/contrib/libs/utf8proc/NEWS.md
index 90868241979..e52d161120d 100644
--- a/contrib/libs/utf8proc/NEWS.md
+++ b/contrib/libs/utf8proc/NEWS.md
@@ -1,5 +1,15 @@
# utf8proc release history #
+## Version 2.11.0 ##
+
+2025-09-10
+
+ - Unicode 17 support ([#292], [#294]).
+
+ - Documentation improvements ([#295], [#291]).
+
+ - Build fix for C90 ([#284]), silence ASAN warning ([#240]), CMake modernization ([#260]).
+
## Version 2.10.0 ##
2024-12-31
@@ -449,7 +459,14 @@ Release of version 1.0.1
[#205]: https://github.com/JuliaStrings/utf8proc/issues/205
[#224]: https://github.com/JuliaStrings/utf8proc/issues/224
[#233]: https://github.com/JuliaStrings/utf8proc/issues/233
+[#240]: https://github.com/JuliaStrings/utf8proc/issues/240
[#247]: https://github.com/JuliaStrings/utf8proc/issues/247
[#253]: https://github.com/JuliaStrings/utf8proc/issues/253
+[#260]: https://github.com/JuliaStrings/utf8proc/issues/260
[#270]: https://github.com/JuliaStrings/utf8proc/issues/270
[#277]: https://github.com/JuliaStrings/utf8proc/issues/277
+[#284]: https://github.com/JuliaStrings/utf8proc/issues/284
+[#291]: https://github.com/JuliaStrings/utf8proc/issues/291
+[#292]: https://github.com/JuliaStrings/utf8proc/issues/292
+[#294]: https://github.com/JuliaStrings/utf8proc/issues/294
+[#295]: https://github.com/JuliaStrings/utf8proc/issues/295
diff --git a/contrib/libs/utf8proc/README.md b/contrib/libs/utf8proc/README.md
index f65247713c7..72fe0cd42a3 100644
--- a/contrib/libs/utf8proc/README.md
+++ b/contrib/libs/utf8proc/README.md
@@ -14,13 +14,11 @@ Software Group, the [Julia developers](http://julialang.org/) have
taken over development of utf8proc, since the original developers have
moved to other projects.
-(utf8proc is used for basic Unicode
+utf8proc is used for basic Unicode
support in the [Julia language](http://julialang.org/), and the Julia
-developers became involved because they wanted to add Unicode 7 support and other features.)
+developers became involved because they wanted to add Unicode 7 support and other features; it is now regularly updated to keep up with recent Unicode releases.
-(The original utf8proc package also includes Ruby and PostgreSQL plug-ins.
-We removed those from utf8proc in order to focus exclusively on the C
-library.)
+There are also utf8proc wrappers for [Ruby](https://www.ruby-toolbox.com/projects/utf8_proc) and [Rust](https://docs.rs/utf8proc/latest/utf8proc/) ([github](https://github.com/Techcable/utf8proc.rs)). (The original utf8proc package also included PostgreSQL bindings.)
The utf8proc package is licensed under the
free/open-source [MIT "expat"
@@ -53,13 +51,23 @@ gmake CC=/opt/aCC/bin/aCC CFLAGS="+O2" PICFLAG="+z" C99FLAG="-Ae" WCFLAGS="+w" L
```
To run `gmake install` you will need GNU coreutils for the `install` command, and you may want to pass `prefix=/opt libdir=/opt/lib/hpux32` or similar to change the installation location.
+### Using with CMake
+
+A CMake Config-file package is provided. To use utf8proc in a CMake project:
+
+```cmake
+add_executable (app app.c)
+find_package (utf8proc 2.9.0 REQUIRED)
+target_link_libraries (app PRIVATE utf8proc::utf8proc)
+```
+
## General Information
The C library is found in this directory after successful compilation
and is named `libutf8proc.a` (for the static library) and
`libutf8proc.so` (for the dynamic library).
-The Unicode version supported is 16.0.0.
+The Unicode version supported is 17.0.0.
For Unicode normalizations, the following options are used:
diff --git a/contrib/libs/utf8proc/utf8proc.c b/contrib/libs/utf8proc/utf8proc.c
index 29e92ea3f1d..87cec94213d 100644
--- a/contrib/libs/utf8proc/utf8proc.c
+++ b/contrib/libs/utf8proc/utf8proc.c
@@ -101,7 +101,7 @@ UTF8PROC_DLLEXPORT const char *utf8proc_version(void) {
}
UTF8PROC_DLLEXPORT const char *utf8proc_unicode_version(void) {
- return "16.0.0";
+ return "17.0.0";
}
UTF8PROC_DLLEXPORT const char *utf8proc_errmsg(utf8proc_ssize_t errcode) {
@@ -388,7 +388,7 @@ static utf8proc_ssize_t seqindex_write_char_decomposed(utf8proc_uint16_t seqinde
for (; len >= 0; entry++, len--) {
utf8proc_int32_t entry_cp = seqindex_decode_entry(&entry);
- written += utf8proc_decompose_char(entry_cp, dst+written,
+ written += utf8proc_decompose_char(entry_cp, dst ? dst+written : dst,
(bufsize > written) ? (bufsize - written) : 0, options,
last_boundclass);
if (written < 0) return UTF8PROC_ERROR_OVERFLOW;
@@ -578,7 +578,7 @@ UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_decompose_custom(
uc = custom_func(uc, custom_data); /* user-specified custom mapping */
}
decomp_result = utf8proc_decompose_char(
- uc, buffer + wpos, (bufsize > wpos) ? (bufsize - wpos) : 0, options,
+ uc, buffer ? buffer+wpos : buffer, (bufsize > wpos) ? (bufsize - wpos) : 0, options,
&boundclass
);
if (decomp_result < 0) return decomp_result;
@@ -688,8 +688,9 @@ UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_normalize_utf32(utf8proc_int32_t *b
int len = starter_property->comb_length;
utf8proc_int32_t max_second = utf8proc_combinations_second[idx + len - 1];
if (current_char <= max_second) {
+ int off;
// TODO: binary search? arithmetic search?
- for (int off = 0; off < len; ++off) {
+ for (off = 0; off < len; ++off) {
utf8proc_int32_t second = utf8proc_combinations_second[idx + off];
if (current_char < second) {
/* not found */
diff --git a/contrib/libs/utf8proc/utf8proc.h b/contrib/libs/utf8proc/utf8proc.h
index 130122106e5..a0c22d7ed1d 100644
--- a/contrib/libs/utf8proc/utf8proc.h
+++ b/contrib/libs/utf8proc/utf8proc.h
@@ -71,7 +71,7 @@
/** 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 10
+#define UTF8PROC_VERSION_MINOR 11
/** The PATCH version (increased for fixes that do not change the API). */
#define UTF8PROC_VERSION_PATCH 0
/** @} */
@@ -136,7 +136,7 @@ typedef enum {
UTF8PROC_STABLE = (1<<1),
/** Compatibility decomposition (i.e. formatting information is lost). */
UTF8PROC_COMPAT = (1<<2),
- /** Return a result with decomposed characters. */
+ /** Return a result with composed characters. */
UTF8PROC_COMPOSE = (1<<3),
/** Return a result with decomposed characters. */
UTF8PROC_DECOMPOSE = (1<<4),
@@ -503,7 +503,7 @@ UTF8PROC_DLLEXPORT const utf8proc_property_t *utf8proc_get_property(utf8proc_int
* @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_REJECTNA - return an error if `codepoint` is unassigned
* - @ref UTF8PROC_IGNORE - strip "default ignorable" codepoints
* - @ref UTF8PROC_CASEFOLD - apply Unicode casefolding
* - @ref UTF8PROC_COMPAT - replace certain codepoints with their
@@ -518,6 +518,11 @@ UTF8PROC_DLLEXPORT const utf8proc_property_t *utf8proc_get_property(utf8proc_int
* option is used. If the string is being processed in order, this can be initialized to 0 for
* the beginning of the string, and is thereafter updated automatically. Otherwise, this parameter is ignored.
*
+ * In the current version of utf8proc, the maximum destination buffer with the @ref UTF8PROC_DECOMPOSE
+ * option is 4 elements (or double that with @ref UTF8PROC_CHARBOUND), so this is a good default size.
+ * However, this may increase in future Unicode versions, so you should always check the return value
+ * as described below.
+ *
* @return
* In case of success, the number of codepoints written is returned; in case
* of an error, a negative error code is returned (utf8proc_errmsg()).
diff --git a/contrib/libs/utf8proc/utf8proc_data.c b/contrib/libs/utf8proc/utf8proc_data.c
index 39b7b777805..94988b33587 100644
--- a/contrib/libs/utf8proc/utf8proc_data.c
+++ b/contrib/libs/utf8proc/utf8proc_data.c
@@ -133,14 +133,14 @@ static const utf8proc_uint16_t utf8proc_sequences[] = {
630, 631, 632, 633, 634, 635, 636, 11364,
638, 639, 422, 641, 42949, 425, 644, 645,
646, 42929, 430, 580, 433, 434, 581, 653,
- 654, 655, 656, 657, 439, 659, 661, 662,
- 663, 664, 665, 666, 667, 668, 42930, 42928,
- 671, 672, 673, 674, 675, 676, 677, 678,
- 679, 680, 681, 682, 683, 684, 685, 686,
- 687, 688, 614, 689, 690, 691, 692, 693,
- 694, 695, 696, 704, 705, 32, 774, 32,
- 775, 32, 778, 32, 808, 32, 771, 32,
- 779, 736, 737, 738, 739, 740, 768, 769,
+ 654, 655, 656, 657, 439, 659, 662, 663,
+ 664, 665, 666, 667, 668, 42930, 42928, 671,
+ 672, 673, 674, 675, 676, 677, 678, 679,
+ 680, 681, 682, 683, 684, 685, 686, 687,
+ 688, 614, 689, 690, 691, 692, 693, 694,
+ 695, 696, 704, 705, 32, 774, 32, 775,
+ 32, 778, 32, 808, 32, 771, 32, 779,
+ 736, 737, 738, 739, 661, 740, 768, 769,
787, 776, 769, 953, 921, 881, 880, 883,
882, 697, 887, 886, 32, 837, 890, 1021,
1022, 1023, 59, 1011, 168, 769, 913, 769,
@@ -843,770 +843,783 @@ static const utf8proc_uint16_t utf8proc_sequences[] = {
42932, 42935, 42934, 42937, 42936, 42939, 42938, 42941,
42940, 42943, 42942, 42945, 42944, 42947, 42946, 42900,
7566, 42952, 42951, 42954, 42953, 612, 42957, 42956,
- 42961, 42960, 42963, 42965, 42967, 42966, 42969, 42968,
- 42971, 42970, 411, 42994, 42995, 42996, 42998, 42997,
- 43000, 43001, 43002, 43824, 43825, 43826, 43827, 43828,
- 43829, 43830, 43831, 43832, 43833, 43834, 43835, 43836,
- 43837, 43838, 43839, 43840, 43841, 43842, 43843, 43844,
- 43845, 43846, 43847, 43848, 43849, 43850, 43851, 43852,
- 43853, 43854, 43855, 43856, 43857, 43858, 42931, 43860,
- 43861, 43862, 43863, 43864, 43865, 43866, 43868, 43869,
- 43870, 43871, 43872, 43873, 43874, 43875, 43876, 43877,
- 43878, 43879, 43880, 43881, 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, 64256, 102, 105, 64257, 102,
- 108, 64258, 102, 102, 105, 64259, 102, 102,
- 108, 64260, 383, 116, 115, 116, 64261, 64262,
- 1396, 1398, 64275, 1396, 1381, 64276, 1396, 1387,
- 64277, 1406, 1398, 64278, 1396, 1389, 64279, 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, 3, 1575, 1604, 1604, 1607, 3,
- 1575, 1603, 1576, 1585, 3, 1605, 1581, 1605,
- 1583, 3, 1589, 1604, 1593, 1605, 3, 1585,
- 1587, 1608, 1604, 3, 1593, 1604, 1610, 1607,
- 3, 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, 3, 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, 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, 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, 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, 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, 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, 55297, 56727, 55297, 56728, 55297, 56729,
- 55297, 56730, 55297, 56731, 55297, 56732, 55297, 56733,
- 55297, 56734, 55297, 56735, 55297, 56736, 55297, 56737,
- 55297, 56739, 55297, 56740, 55297, 56741, 55297, 56742,
- 55297, 56743, 55297, 56744, 55297, 56745, 55297, 56746,
- 55297, 56747, 55297, 56748, 55297, 56749, 55297, 56750,
- 55297, 56751, 55297, 56752, 55297, 56753, 55297, 56755,
- 55297, 56756, 55297, 56757, 55297, 56758, 55297, 56759,
- 55297, 56760, 55297, 56761, 55297, 56763, 55297, 56764,
- 55297, 56688, 55297, 56689, 55297, 56690, 55297, 56691,
- 55297, 56692, 55297, 56693, 55297, 56694, 55297, 56695,
- 55297, 56696, 55297, 56697, 55297, 56698, 55297, 56700,
- 55297, 56701, 55297, 56702, 55297, 56703, 55297, 56704,
- 55297, 56705, 55297, 56706, 55297, 56707, 55297, 56708,
- 55297, 56709, 55297, 56710, 55297, 56711, 55297, 56712,
- 55297, 56713, 55297, 56714, 55297, 56716, 55297, 56717,
- 55297, 56718, 55297, 56719, 55297, 56720, 55297, 56721,
- 55297, 56722, 55297, 56724, 55297, 56725, 55297, 56786,
- 775, 55297, 56794, 775, 55297, 57216, 720, 721,
- 55297, 57219, 55297, 57220, 55297, 57221, 55297, 57223,
- 55297, 57224, 55297, 57225, 55297, 57226, 55297, 57227,
- 55297, 57228, 55297, 57229, 55297, 57230, 55297, 57231,
- 55297, 57232, 55297, 57233, 55297, 57234, 55297, 57235,
- 55297, 57236, 55297, 57237, 55297, 57238, 55297, 57239,
- 55297, 57240, 55297, 57241, 55297, 57242, 55297, 57243,
- 55351, 57092, 55297, 57244, 55297, 57245, 55297, 57246,
- 55351, 57093, 55297, 57247, 55297, 57248, 55351, 57094,
- 55297, 57249, 55297, 57250, 55297, 57251, 55297, 57252,
- 55297, 57253, 55297, 57254, 55351, 57096, 55297, 57255,
- 55297, 57256, 55297, 57257, 55297, 57258, 55297, 57259,
- 55297, 57260, 55297, 57261, 55297, 57262, 55297, 57263,
- 55297, 57264, 55297, 57266, 55297, 57267, 55297, 57268,
- 55297, 57269, 448, 55297, 57270, 449, 55297, 57271,
- 450, 55297, 57272, 55351, 57098, 55297, 57273, 55351,
- 57118, 55297, 57274, 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, 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, 55299,
- 56688, 55299, 56689, 55299, 56690, 55299, 56691, 55299,
- 56692, 55299, 56693, 55299, 56694, 55299, 56695, 55299,
- 56696, 55299, 56697, 55299, 56698, 55299, 56699, 55299,
- 56700, 55299, 56701, 55299, 56702, 55299, 56703, 55299,
- 56704, 55299, 56705, 55299, 56706, 55299, 56707, 55299,
- 56708, 55299, 56709, 55299, 56656, 55299, 56657, 55299,
- 56658, 55299, 56659, 55299, 56660, 55299, 56661, 55299,
- 56662, 55299, 56663, 55299, 56664, 55299, 56665, 55299,
- 56666, 55299, 56667, 55299, 56668, 55299, 56669, 55299,
- 56670, 55299, 56671, 55299, 56672, 55299, 56673, 55299,
- 56674, 55299, 56675, 55299, 56676, 55299, 56677, 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, 55300, 57218, 55300, 57289, 55300,
- 57220, 55300, 57275, 55300, 57227, 55300, 57282, 55300,
- 57232, 55300, 57289, 55300, 57282, 55300, 57282, 55300,
- 57282, 55300, 57272, 55300, 57282, 55300, 57289, 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, 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, 55302, 56629, 55302, 56624, 55320,
- 56606, 55320, 56606, 55320, 56606, 55320, 56617, 55320,
- 56606, 55320, 56607, 55320, 56617, 55320, 56607, 55320,
- 56606, 55320, 56608, 55320, 56609, 55320, 56607, 55320,
- 56610, 55320, 56607, 55320, 56609, 55320, 56608, 55323,
- 56679, 55323, 56679, 55323, 56675, 55323, 56679, 55323,
- 56681, 55323, 56679, 55323, 56928, 55323, 56929, 55323,
- 56930, 55323, 56931, 55323, 56932, 55323, 56933, 55323,
- 56934, 55323, 56935, 55323, 56936, 55323, 56937, 55323,
- 56938, 55323, 56939, 55323, 56940, 55323, 56941, 55323,
- 56942, 55323, 56943, 55323, 56944, 55323, 56945, 55323,
- 56946, 55323, 56947, 55323, 56948, 55323, 56949, 55323,
- 56950, 55323, 56951, 55323, 56952, 55323, 56953, 55323,
- 56954, 55323, 56955, 55323, 56956, 55323, 56957, 55323,
- 56958, 55323, 56959, 55323, 56896, 55323, 56897, 55323,
- 56898, 55323, 56899, 55323, 56900, 55323, 56901, 55323,
- 56902, 55323, 56903, 55323, 56904, 55323, 56905, 55323,
- 56906, 55323, 56907, 55323, 56908, 55323, 56909, 55323,
- 56910, 55323, 56911, 55323, 56912, 55323, 56913, 55323,
- 56914, 55323, 56915, 55323, 56916, 55323, 56917, 55323,
- 56918, 55323, 56919, 55323, 56920, 55323, 56921, 55323,
- 56922, 55323, 56923, 55323, 56924, 55323, 56925, 55323,
- 56926, 55323, 56927, 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, 55349,
- 56320, 55349, 56321, 55349, 56322, 55349, 56323, 55349,
- 56324, 55349, 56325, 55349, 56326, 55349, 56327, 55349,
- 56328, 55349, 56329, 55349, 56330, 55349, 56331, 55349,
- 56332, 55349, 56333, 55349, 56334, 55349, 56335, 55349,
- 56336, 55349, 56337, 55349, 56338, 55349, 56339, 55349,
- 56340, 55349, 56341, 55349, 56342, 55349, 56343, 55349,
- 56344, 55349, 56345, 55349, 56346, 55349, 56347, 55349,
- 56348, 55349, 56349, 55349, 56350, 55349, 56351, 55349,
- 56352, 55349, 56353, 55349, 56354, 55349, 56355, 55349,
- 56356, 55349, 56357, 55349, 56358, 55349, 56359, 55349,
- 56360, 55349, 56361, 55349, 56362, 55349, 56363, 55349,
- 56364, 55349, 56365, 55349, 56366, 55349, 56367, 55349,
- 56368, 55349, 56369, 55349, 56370, 55349, 56371, 55349,
- 56372, 55349, 56373, 55349, 56374, 55349, 56375, 55349,
- 56376, 55349, 56377, 55349, 56378, 55349, 56379, 55349,
- 56380, 55349, 56381, 55349, 56382, 55349, 56383, 55349,
- 56384, 55349, 56385, 55349, 56386, 55349, 56387, 55349,
- 56388, 55349, 56389, 55349, 56390, 55349, 56391, 55349,
- 56392, 55349, 56393, 55349, 56394, 55349, 56395, 55349,
- 56396, 55349, 56397, 55349, 56398, 55349, 56399, 55349,
- 56400, 55349, 56401, 55349, 56402, 55349, 56403, 55349,
- 56404, 55349, 56406, 55349, 56407, 55349, 56408, 55349,
- 56409, 55349, 56410, 55349, 56411, 55349, 56412, 55349,
- 56413, 55349, 56414, 55349, 56415, 55349, 56416, 55349,
- 56417, 55349, 56418, 55349, 56419, 55349, 56420, 55349,
- 56421, 55349, 56422, 55349, 56423, 55349, 56424, 55349,
- 56425, 55349, 56426, 55349, 56427, 55349, 56428, 55349,
- 56429, 55349, 56430, 55349, 56431, 55349, 56432, 55349,
- 56433, 55349, 56434, 55349, 56435, 55349, 56436, 55349,
- 56437, 55349, 56438, 55349, 56439, 55349, 56440, 55349,
- 56441, 55349, 56442, 55349, 56443, 55349, 56444, 55349,
- 56445, 55349, 56446, 55349, 56447, 55349, 56448, 55349,
- 56449, 55349, 56450, 55349, 56451, 55349, 56452, 55349,
- 56453, 55349, 56454, 55349, 56455, 55349, 56456, 55349,
- 56457, 55349, 56458, 55349, 56459, 55349, 56460, 55349,
- 56461, 55349, 56462, 55349, 56463, 55349, 56464, 55349,
- 56465, 55349, 56466, 55349, 56467, 55349, 56468, 55349,
- 56469, 55349, 56470, 55349, 56471, 55349, 56472, 55349,
- 56473, 55349, 56474, 55349, 56475, 55349, 56476, 55349,
- 56478, 55349, 56479, 55349, 56482, 55349, 56485, 55349,
- 56486, 55349, 56489, 55349, 56490, 55349, 56491, 55349,
- 56492, 55349, 56494, 55349, 56495, 55349, 56496, 55349,
- 56497, 55349, 56498, 55349, 56499, 55349, 56500, 55349,
- 56501, 55349, 56502, 55349, 56503, 55349, 56504, 55349,
- 56505, 55349, 56507, 55349, 56509, 55349, 56510, 55349,
- 56511, 55349, 56512, 55349, 56513, 55349, 56514, 55349,
- 56515, 55349, 56517, 55349, 56518, 55349, 56519, 55349,
- 56520, 55349, 56521, 55349, 56522, 55349, 56523, 55349,
- 56524, 55349, 56525, 55349, 56526, 55349, 56527, 55349,
- 56528, 55349, 56529, 55349, 56530, 55349, 56531, 55349,
- 56532, 55349, 56533, 55349, 56534, 55349, 56535, 55349,
- 56536, 55349, 56537, 55349, 56538, 55349, 56539, 55349,
- 56540, 55349, 56541, 55349, 56542, 55349, 56543, 55349,
- 56544, 55349, 56545, 55349, 56546, 55349, 56547, 55349,
- 56548, 55349, 56549, 55349, 56550, 55349, 56551, 55349,
- 56552, 55349, 56553, 55349, 56554, 55349, 56555, 55349,
- 56556, 55349, 56557, 55349, 56558, 55349, 56559, 55349,
- 56560, 55349, 56561, 55349, 56562, 55349, 56563, 55349,
- 56564, 55349, 56565, 55349, 56566, 55349, 56567, 55349,
- 56568, 55349, 56569, 55349, 56570, 55349, 56571, 55349,
- 56572, 55349, 56573, 55349, 56574, 55349, 56575, 55349,
- 56576, 55349, 56577, 55349, 56578, 55349, 56579, 55349,
- 56580, 55349, 56581, 55349, 56583, 55349, 56584, 55349,
- 56585, 55349, 56586, 55349, 56589, 55349, 56590, 55349,
- 56591, 55349, 56592, 55349, 56593, 55349, 56594, 55349,
- 56595, 55349, 56596, 55349, 56598, 55349, 56599, 55349,
- 56600, 55349, 56601, 55349, 56602, 55349, 56603, 55349,
- 56604, 55349, 56606, 55349, 56607, 55349, 56608, 55349,
- 56609, 55349, 56610, 55349, 56611, 55349, 56612, 55349,
- 56613, 55349, 56614, 55349, 56615, 55349, 56616, 55349,
- 56617, 55349, 56618, 55349, 56619, 55349, 56620, 55349,
- 56621, 55349, 56622, 55349, 56623, 55349, 56624, 55349,
- 56625, 55349, 56626, 55349, 56627, 55349, 56628, 55349,
- 56629, 55349, 56630, 55349, 56631, 55349, 56632, 55349,
- 56633, 55349, 56635, 55349, 56636, 55349, 56637, 55349,
- 56638, 55349, 56640, 55349, 56641, 55349, 56642, 55349,
- 56643, 55349, 56644, 55349, 56646, 55349, 56650, 55349,
- 56651, 55349, 56652, 55349, 56653, 55349, 56654, 55349,
- 56655, 55349, 56656, 55349, 56658, 55349, 56659, 55349,
- 56660, 55349, 56661, 55349, 56662, 55349, 56663, 55349,
- 56664, 55349, 56665, 55349, 56666, 55349, 56667, 55349,
- 56668, 55349, 56669, 55349, 56670, 55349, 56671, 55349,
- 56672, 55349, 56673, 55349, 56674, 55349, 56675, 55349,
- 56676, 55349, 56677, 55349, 56678, 55349, 56679, 55349,
- 56680, 55349, 56681, 55349, 56682, 55349, 56683, 55349,
- 56684, 55349, 56685, 55349, 56686, 55349, 56687, 55349,
- 56688, 55349, 56689, 55349, 56690, 55349, 56691, 55349,
- 56692, 55349, 56693, 55349, 56694, 55349, 56695, 55349,
- 56696, 55349, 56697, 55349, 56698, 55349, 56699, 55349,
- 56700, 55349, 56701, 55349, 56702, 55349, 56703, 55349,
- 56704, 55349, 56705, 55349, 56706, 55349, 56707, 55349,
- 56708, 55349, 56709, 55349, 56710, 55349, 56711, 55349,
- 56712, 55349, 56713, 55349, 56714, 55349, 56715, 55349,
- 56716, 55349, 56717, 55349, 56718, 55349, 56719, 55349,
- 56720, 55349, 56721, 55349, 56722, 55349, 56723, 55349,
- 56724, 55349, 56725, 55349, 56726, 55349, 56727, 55349,
- 56728, 55349, 56729, 55349, 56730, 55349, 56731, 55349,
- 56732, 55349, 56733, 55349, 56734, 55349, 56735, 55349,
- 56736, 55349, 56737, 55349, 56738, 55349, 56739, 55349,
- 56740, 55349, 56741, 55349, 56742, 55349, 56743, 55349,
- 56744, 55349, 56745, 55349, 56746, 55349, 56747, 55349,
- 56748, 55349, 56749, 55349, 56750, 55349, 56751, 55349,
- 56752, 55349, 56753, 55349, 56754, 55349, 56755, 55349,
- 56756, 55349, 56757, 55349, 56758, 55349, 56759, 55349,
- 56760, 55349, 56761, 55349, 56762, 55349, 56763, 55349,
- 56764, 55349, 56765, 55349, 56766, 55349, 56767, 55349,
- 56768, 55349, 56769, 55349, 56770, 55349, 56771, 55349,
- 56772, 55349, 56773, 55349, 56774, 55349, 56775, 55349,
- 56776, 55349, 56777, 55349, 56778, 55349, 56779, 55349,
- 56780, 55349, 56781, 55349, 56782, 55349, 56783, 55349,
- 56784, 55349, 56785, 55349, 56786, 55349, 56787, 55349,
- 56788, 55349, 56789, 55349, 56790, 55349, 56791, 55349,
- 56792, 55349, 56793, 55349, 56794, 55349, 56795, 55349,
- 56796, 55349, 56797, 55349, 56798, 55349, 56799, 55349,
- 56800, 55349, 56801, 55349, 56802, 55349, 56803, 55349,
- 56804, 55349, 56805, 55349, 56806, 55349, 56807, 55349,
- 56808, 55349, 56809, 55349, 56810, 55349, 56811, 55349,
- 56812, 55349, 56813, 55349, 56814, 55349, 56815, 55349,
- 56816, 55349, 56817, 55349, 56818, 55349, 56819, 55349,
- 56820, 55349, 56821, 55349, 56822, 55349, 56823, 55349,
- 56824, 55349, 56825, 55349, 56826, 55349, 56827, 55349,
- 56828, 55349, 56829, 55349, 56830, 55349, 56831, 55349,
- 56832, 55349, 56833, 55349, 56834, 55349, 56835, 55349,
- 56836, 55349, 56837, 55349, 56838, 55349, 56839, 55349,
- 56840, 55349, 56841, 55349, 56842, 55349, 56843, 55349,
- 56844, 55349, 56845, 55349, 56846, 55349, 56847, 55349,
- 56848, 55349, 56849, 55349, 56850, 55349, 56851, 55349,
- 56852, 55349, 56853, 55349, 56854, 55349, 56855, 55349,
- 56856, 55349, 56857, 55349, 56858, 55349, 56859, 55349,
- 56860, 55349, 56861, 55349, 56862, 55349, 56863, 55349,
- 56864, 55349, 56865, 55349, 56866, 55349, 56867, 55349,
- 56868, 55349, 56869, 55349, 56870, 55349, 56871, 55349,
- 56872, 55349, 56873, 55349, 56874, 55349, 56875, 55349,
- 56876, 55349, 56877, 55349, 56878, 55349, 56879, 55349,
- 56880, 55349, 56881, 55349, 56882, 55349, 56883, 55349,
- 56884, 55349, 56885, 55349, 56886, 55349, 56887, 55349,
- 56888, 55349, 56889, 55349, 56890, 55349, 56891, 55349,
- 56892, 55349, 56893, 55349, 56894, 55349, 56895, 55349,
- 56896, 55349, 56897, 55349, 56898, 55349, 56899, 55349,
- 56900, 55349, 56901, 55349, 56902, 55349, 56903, 55349,
- 56904, 55349, 56905, 55349, 56906, 55349, 56907, 55349,
- 56908, 55349, 56909, 55349, 56910, 55349, 56911, 55349,
- 56912, 55349, 56913, 55349, 56914, 55349, 56915, 55349,
- 56916, 55349, 56917, 55349, 56918, 55349, 56919, 55349,
- 56920, 55349, 56921, 55349, 56922, 55349, 56923, 55349,
- 56924, 55349, 56925, 55349, 56926, 55349, 56927, 55349,
- 56928, 55349, 56929, 55349, 56930, 55349, 56931, 55349,
- 56932, 55349, 56933, 55349, 56934, 55349, 56935, 55349,
- 56936, 55349, 56937, 55349, 56938, 55349, 56939, 55349,
- 56940, 55349, 56941, 55349, 56942, 55349, 56943, 55349,
- 56944, 55349, 56945, 55349, 56946, 55349, 56947, 55349,
- 56948, 55349, 56949, 55349, 56950, 55349, 56951, 55349,
- 56952, 55349, 56953, 55349, 56954, 55349, 56955, 55349,
- 56956, 55349, 56957, 55349, 56958, 55349, 56959, 55349,
- 56960, 55349, 56961, 55349, 56962, 55349, 56963, 55349,
- 56964, 55349, 56965, 55349, 56966, 55349, 56967, 55349,
- 56968, 55349, 56969, 55349, 56970, 55349, 56971, 55349,
- 56972, 55349, 56973, 55349, 56974, 55349, 56975, 55349,
- 56976, 55349, 56977, 55349, 56978, 55349, 56979, 55349,
- 56980, 55349, 56981, 55349, 56982, 55349, 56983, 55349,
- 56984, 55349, 56985, 55349, 56986, 55349, 56987, 55349,
- 56988, 55349, 56989, 55349, 56990, 55349, 56991, 55349,
- 56992, 55349, 56993, 55349, 56994, 55349, 56995, 305,
- 55349, 56996, 55349, 56997, 55349, 57000, 55349, 57001,
- 55349, 57002, 55349, 57003, 55349, 57004, 55349, 57005,
- 55349, 57006, 55349, 57007, 55349, 57008, 55349, 57009,
- 55349, 57010, 55349, 57011, 55349, 57012, 55349, 57013,
- 55349, 57014, 55349, 57015, 55349, 57016, 1012, 55349,
- 57017, 55349, 57018, 55349, 57019, 55349, 57020, 55349,
- 57021, 55349, 57022, 55349, 57023, 55349, 57024, 8711,
- 55349, 57026, 55349, 57027, 55349, 57028, 55349, 57029,
- 55349, 57030, 55349, 57031, 55349, 57032, 55349, 57033,
- 55349, 57034, 55349, 57035, 55349, 57036, 55349, 57037,
- 55349, 57038, 55349, 57039, 55349, 57040, 55349, 57041,
- 55349, 57042, 55349, 57043, 55349, 57044, 55349, 57045,
- 55349, 57046, 55349, 57047, 55349, 57048, 55349, 57049,
- 55349, 57050, 8706, 1013, 55349, 57052, 977, 55349,
- 57053, 1008, 55349, 57054, 981, 55349, 57055, 1009,
- 55349, 57056, 982, 55349, 57057, 55349, 57058, 55349,
- 57059, 55349, 57060, 55349, 57061, 55349, 57062, 55349,
- 57063, 55349, 57064, 55349, 57065, 55349, 57066, 55349,
- 57067, 55349, 57068, 55349, 57069, 55349, 57070, 55349,
- 57071, 55349, 57072, 55349, 57073, 55349, 57074, 55349,
- 57075, 55349, 57076, 55349, 57077, 55349, 57078, 55349,
- 57079, 55349, 57080, 55349, 57081, 55349, 57082, 55349,
- 57084, 55349, 57085, 55349, 57086, 55349, 57087, 55349,
- 57088, 55349, 57089, 55349, 57090, 55349, 57091, 55349,
- 57092, 55349, 57093, 55349, 57094, 55349, 57095, 55349,
- 57096, 55349, 57097, 55349, 57098, 55349, 57099, 55349,
- 57100, 55349, 57101, 55349, 57102, 55349, 57103, 55349,
- 57104, 55349, 57105, 55349, 57106, 55349, 57107, 55349,
- 57108, 55349, 57110, 55349, 57111, 55349, 57112, 55349,
- 57113, 55349, 57114, 55349, 57115, 55349, 57116, 55349,
- 57117, 55349, 57118, 55349, 57119, 55349, 57120, 55349,
- 57121, 55349, 57122, 55349, 57123, 55349, 57124, 55349,
- 57125, 55349, 57126, 55349, 57127, 55349, 57128, 55349,
- 57129, 55349, 57130, 55349, 57131, 55349, 57132, 55349,
- 57133, 55349, 57134, 55349, 57135, 55349, 57136, 55349,
- 57137, 55349, 57138, 55349, 57139, 55349, 57140, 55349,
- 57142, 55349, 57143, 55349, 57144, 55349, 57145, 55349,
- 57146, 55349, 57147, 55349, 57148, 55349, 57149, 55349,
- 57150, 55349, 57151, 55349, 57152, 55349, 57153, 55349,
- 57154, 55349, 57155, 55349, 57156, 55349, 57157, 55349,
- 57158, 55349, 57159, 55349, 57160, 55349, 57161, 55349,
- 57162, 55349, 57163, 55349, 57164, 55349, 57165, 55349,
- 57166, 55349, 57168, 55349, 57169, 55349, 57170, 55349,
- 57171, 55349, 57172, 55349, 57173, 55349, 57174, 55349,
- 57175, 55349, 57176, 55349, 57177, 55349, 57178, 55349,
- 57179, 55349, 57180, 55349, 57181, 55349, 57182, 55349,
- 57183, 55349, 57184, 55349, 57185, 55349, 57186, 55349,
- 57187, 55349, 57188, 55349, 57189, 55349, 57190, 55349,
- 57191, 55349, 57192, 55349, 57193, 55349, 57194, 55349,
- 57195, 55349, 57196, 55349, 57197, 55349, 57198, 55349,
- 57200, 55349, 57201, 55349, 57202, 55349, 57203, 55349,
- 57204, 55349, 57205, 55349, 57206, 55349, 57207, 55349,
- 57208, 55349, 57209, 55349, 57210, 55349, 57211, 55349,
- 57212, 55349, 57213, 55349, 57214, 55349, 57215, 55349,
- 57216, 55349, 57217, 55349, 57218, 55349, 57219, 55349,
- 57220, 55349, 57221, 55349, 57222, 55349, 57223, 55349,
- 57224, 55349, 57226, 55349, 57227, 55349, 57228, 55349,
- 57229, 55349, 57230, 55349, 57231, 55349, 57232, 55349,
- 57233, 55349, 57234, 55349, 57235, 55349, 57236, 55349,
- 57237, 55349, 57238, 55349, 57239, 55349, 57240, 55349,
- 57241, 55349, 57242, 55349, 57243, 55349, 57244, 55349,
- 57245, 55349, 57246, 55349, 57247, 55349, 57248, 55349,
- 57249, 55349, 57250, 55349, 57251, 55349, 57252, 55349,
- 57253, 55349, 57254, 55349, 57255, 55349, 57256, 55349,
- 57258, 55349, 57259, 55349, 57260, 55349, 57261, 55349,
- 57262, 55349, 57263, 55349, 57264, 55349, 57265, 55349,
- 57266, 55349, 57267, 55349, 57268, 55349, 57269, 55349,
- 57270, 55349, 57271, 55349, 57272, 55349, 57273, 55349,
- 57274, 55349, 57275, 55349, 57276, 55349, 57277, 55349,
- 57278, 55349, 57279, 55349, 57280, 55349, 57281, 55349,
- 57282, 55349, 57284, 55349, 57285, 55349, 57286, 55349,
- 57287, 55349, 57288, 55349, 57289, 55349, 57290, 55349,
- 57291, 55351, 57088, 55351, 57089, 55351, 57090, 55351,
- 57091, 55351, 57095, 55351, 57097, 55351, 57099, 55351,
- 57100, 55351, 57101, 55351, 57102, 55351, 57103, 55351,
- 57104, 55351, 57105, 55351, 57106, 55351, 57107, 55351,
- 57108, 55351, 57109, 55351, 57110, 55351, 57111, 55351,
- 57112, 55351, 57113, 55351, 57114, 55351, 57115, 55351,
- 57116, 55351, 57117, 55351, 57125, 55351, 57126, 55351,
- 57127, 55351, 57128, 55351, 57129, 55351, 57130, 55352,
- 56368, 55352, 56369, 55352, 56370, 55352, 56371, 55352,
- 56372, 55352, 56373, 55352, 56374, 55352, 56375, 55352,
- 56376, 55352, 56377, 55352, 56378, 55352, 56379, 55352,
- 56380, 55352, 56381, 55352, 56382, 55352, 56383, 55352,
- 56384, 55352, 56385, 55352, 56386, 55352, 56387, 55352,
- 56388, 55352, 56389, 55352, 56390, 55352, 56391, 55352,
- 56392, 55352, 56393, 55352, 56394, 55352, 56395, 55352,
- 56396, 55352, 56397, 55352, 56398, 55352, 56399, 55352,
- 56400, 55352, 56401, 55352, 56402, 55352, 56403, 55352,
- 56404, 55352, 56405, 55352, 56406, 55352, 56407, 55352,
- 56408, 55352, 56409, 55352, 56410, 55352, 56411, 55352,
- 56412, 55352, 56413, 55352, 56414, 55352, 56415, 55352,
- 56416, 55352, 56417, 55352, 56418, 55352, 56419, 55352,
- 56420, 55352, 56421, 55352, 56422, 55352, 56423, 55352,
- 56424, 55352, 56425, 55352, 56426, 55352, 56427, 55352,
- 56428, 55352, 56429, 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, 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, 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, 55356, 56624, 55356, 56625, 55356, 56626, 55356,
- 56627, 55356, 56628, 55356, 56629, 55356, 56630, 55356,
- 56631, 55356, 56632, 55356, 56633, 55356, 56634, 55356,
- 56635, 55356, 56636, 55356, 56637, 55356, 56638, 55356,
- 56639, 55356, 56640, 55356, 56641, 55356, 56642, 55356,
- 56643, 55356, 56644, 55356, 56645, 55356, 56646, 55356,
- 56647, 55356, 56648, 55356, 56649, 72, 86, 83,
- 68, 83, 83, 80, 80, 86, 87, 67,
- 55356, 56656, 55356, 56657, 55356, 56658, 55356, 56659,
- 55356, 56660, 55356, 56661, 55356, 56662, 55356, 56663,
- 55356, 56664, 55356, 56665, 55356, 56666, 55356, 56667,
- 55356, 56668, 55356, 56669, 55356, 56670, 55356, 56671,
- 55356, 56672, 55356, 56673, 55356, 56674, 55356, 56675,
- 55356, 56676, 55356, 56677, 55356, 56678, 55356, 56679,
- 55356, 56680, 55356, 56681, 77, 67, 77, 68,
- 77, 82, 55356, 56688, 55356, 56689, 55356, 56690,
- 55356, 56691, 55356, 56692, 55356, 56693, 55356, 56694,
- 55356, 56695, 55356, 56696, 55356, 56697, 55356, 56698,
- 55356, 56699, 55356, 56700, 55356, 56701, 55356, 56702,
- 55356, 56703, 55356, 56704, 55356, 56705, 55356, 56706,
- 55356, 56707, 55356, 56708, 55356, 56709, 55356, 56710,
- 55356, 56711, 55356, 56712, 55356, 56713, 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, };
+ 42959, 42958, 42961, 42960, 42963, 42962, 42965, 42964,
+ 42967, 42966, 42969, 42968, 42971, 42970, 411, 42993,
+ 42994, 42995, 42996, 42998, 42997, 43000, 43001, 43002,
+ 43824, 43825, 43826, 43827, 43828, 43829, 43830, 43831,
+ 43832, 43833, 43834, 43835, 43836, 43837, 43838, 43839,
+ 43840, 43841, 43842, 43843, 43844, 43845, 43846, 43847,
+ 43848, 43849, 43850, 43851, 43852, 43853, 43854, 43855,
+ 43856, 43857, 43858, 42931, 43860, 43861, 43862, 43863,
+ 43864, 43865, 43866, 43868, 43869, 43870, 43871, 43872,
+ 43873, 43874, 43875, 43876, 43877, 43878, 43879, 43880,
+ 43881, 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,
+ 64256, 102, 105, 64257, 102, 108, 64258, 102,
+ 102, 105, 64259, 102, 102, 108, 64260, 383,
+ 116, 115, 116, 64261, 64262, 1396, 1398, 64275,
+ 1396, 1381, 64276, 1396, 1387, 64277, 1406, 1398,
+ 64278, 1396, 1389, 64279, 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, 3,
+ 1575, 1604, 1604, 1607, 3, 1575, 1603, 1576,
+ 1585, 3, 1605, 1581, 1605, 1583, 3, 1589,
+ 1604, 1593, 1605, 3, 1585, 1587, 1608, 1604,
+ 3, 1593, 1604, 1610, 1607, 3, 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, 3, 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, 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, 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,
+ 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,
+ 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, 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, 55297,
+ 56727, 55297, 56728, 55297, 56729, 55297, 56730, 55297,
+ 56731, 55297, 56732, 55297, 56733, 55297, 56734, 55297,
+ 56735, 55297, 56736, 55297, 56737, 55297, 56739, 55297,
+ 56740, 55297, 56741, 55297, 56742, 55297, 56743, 55297,
+ 56744, 55297, 56745, 55297, 56746, 55297, 56747, 55297,
+ 56748, 55297, 56749, 55297, 56750, 55297, 56751, 55297,
+ 56752, 55297, 56753, 55297, 56755, 55297, 56756, 55297,
+ 56757, 55297, 56758, 55297, 56759, 55297, 56760, 55297,
+ 56761, 55297, 56763, 55297, 56764, 55297, 56688, 55297,
+ 56689, 55297, 56690, 55297, 56691, 55297, 56692, 55297,
+ 56693, 55297, 56694, 55297, 56695, 55297, 56696, 55297,
+ 56697, 55297, 56698, 55297, 56700, 55297, 56701, 55297,
+ 56702, 55297, 56703, 55297, 56704, 55297, 56705, 55297,
+ 56706, 55297, 56707, 55297, 56708, 55297, 56709, 55297,
+ 56710, 55297, 56711, 55297, 56712, 55297, 56713, 55297,
+ 56714, 55297, 56716, 55297, 56717, 55297, 56718, 55297,
+ 56719, 55297, 56720, 55297, 56721, 55297, 56722, 55297,
+ 56724, 55297, 56725, 55297, 56786, 775, 55297, 56794,
+ 775, 55297, 57216, 720, 721, 55297, 57219, 55297,
+ 57220, 55297, 57221, 55297, 57223, 55297, 57224, 55297,
+ 57225, 55297, 57226, 55297, 57227, 55297, 57228, 55297,
+ 57229, 55297, 57230, 55297, 57231, 55297, 57232, 55297,
+ 57233, 55297, 57234, 55297, 57235, 55297, 57236, 55297,
+ 57237, 55297, 57238, 55297, 57239, 55297, 57240, 55297,
+ 57241, 55297, 57242, 55297, 57243, 55351, 57092, 55297,
+ 57244, 55297, 57245, 55297, 57246, 55351, 57093, 55297,
+ 57247, 55297, 57248, 55351, 57094, 55297, 57249, 55297,
+ 57250, 55297, 57251, 55297, 57252, 55297, 57253, 55297,
+ 57254, 55351, 57096, 55297, 57255, 55297, 57256, 55297,
+ 57257, 55297, 57258, 55297, 57259, 55297, 57260, 55297,
+ 57261, 55297, 57262, 55297, 57263, 55297, 57264, 55297,
+ 57266, 55297, 57267, 55297, 57268, 55297, 57269, 448,
+ 55297, 57270, 449, 55297, 57271, 450, 55297, 57272,
+ 55351, 57098, 55297, 57273, 55351, 57118, 55297, 57274,
+ 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, 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, 55299, 56688, 55299, 56689,
+ 55299, 56690, 55299, 56691, 55299, 56692, 55299, 56693,
+ 55299, 56694, 55299, 56695, 55299, 56696, 55299, 56697,
+ 55299, 56698, 55299, 56699, 55299, 56700, 55299, 56701,
+ 55299, 56702, 55299, 56703, 55299, 56704, 55299, 56705,
+ 55299, 56706, 55299, 56707, 55299, 56708, 55299, 56709,
+ 55299, 56656, 55299, 56657, 55299, 56658, 55299, 56659,
+ 55299, 56660, 55299, 56661, 55299, 56662, 55299, 56663,
+ 55299, 56664, 55299, 56665, 55299, 56666, 55299, 56667,
+ 55299, 56668, 55299, 56669, 55299, 56670, 55299, 56671,
+ 55299, 56672, 55299, 56673, 55299, 56674, 55299, 56675,
+ 55299, 56676, 55299, 56677, 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,
+ 55300, 57218, 55300, 57289, 55300, 57220, 55300, 57275,
+ 55300, 57227, 55300, 57282, 55300, 57232, 55300, 57289,
+ 55300, 57282, 55300, 57282, 55300, 57282, 55300, 57272,
+ 55300, 57282, 55300, 57289, 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,
+ 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,
+ 55302, 56629, 55302, 56624, 55320, 56606, 55320, 56606,
+ 55320, 56606, 55320, 56617, 55320, 56606, 55320, 56607,
+ 55320, 56617, 55320, 56607, 55320, 56606, 55320, 56608,
+ 55320, 56609, 55320, 56607, 55320, 56610, 55320, 56607,
+ 55320, 56609, 55320, 56608, 55323, 56679, 55323, 56679,
+ 55323, 56675, 55323, 56679, 55323, 56681, 55323, 56679,
+ 55323, 56928, 55323, 56929, 55323, 56930, 55323, 56931,
+ 55323, 56932, 55323, 56933, 55323, 56934, 55323, 56935,
+ 55323, 56936, 55323, 56937, 55323, 56938, 55323, 56939,
+ 55323, 56940, 55323, 56941, 55323, 56942, 55323, 56943,
+ 55323, 56944, 55323, 56945, 55323, 56946, 55323, 56947,
+ 55323, 56948, 55323, 56949, 55323, 56950, 55323, 56951,
+ 55323, 56952, 55323, 56953, 55323, 56954, 55323, 56955,
+ 55323, 56956, 55323, 56957, 55323, 56958, 55323, 56959,
+ 55323, 56896, 55323, 56897, 55323, 56898, 55323, 56899,
+ 55323, 56900, 55323, 56901, 55323, 56902, 55323, 56903,
+ 55323, 56904, 55323, 56905, 55323, 56906, 55323, 56907,
+ 55323, 56908, 55323, 56909, 55323, 56910, 55323, 56911,
+ 55323, 56912, 55323, 56913, 55323, 56914, 55323, 56915,
+ 55323, 56916, 55323, 56917, 55323, 56918, 55323, 56919,
+ 55323, 56920, 55323, 56921, 55323, 56922, 55323, 56923,
+ 55323, 56924, 55323, 56925, 55323, 56926, 55323, 56927,
+ 55323, 57019, 55323, 57020, 55323, 57021, 55323, 57022,
+ 55323, 57023, 55323, 57024, 55323, 57025, 55323, 57026,
+ 55323, 57027, 55323, 57028, 55323, 57029, 55323, 57030,
+ 55323, 57031, 55323, 57032, 55323, 57033, 55323, 57034,
+ 55323, 57035, 55323, 57036, 55323, 57037, 55323, 57038,
+ 55323, 57039, 55323, 57040, 55323, 57041, 55323, 57042,
+ 55323, 57043, 55323, 56992, 55323, 56993, 55323, 56994,
+ 55323, 56995, 55323, 56996, 55323, 56997, 55323, 56998,
+ 55323, 56999, 55323, 57000, 55323, 57001, 55323, 57002,
+ 55323, 57003, 55323, 57004, 55323, 57005, 55323, 57006,
+ 55323, 57007, 55323, 57008, 55323, 57009, 55323, 57010,
+ 55323, 57011, 55323, 57012, 55323, 57013, 55323, 57014,
+ 55323, 57015, 55323, 57016, 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,
+ 55349, 56320, 55349, 56321, 55349, 56322, 55349, 56323,
+ 55349, 56324, 55349, 56325, 55349, 56326, 55349, 56327,
+ 55349, 56328, 55349, 56329, 55349, 56330, 55349, 56331,
+ 55349, 56332, 55349, 56333, 55349, 56334, 55349, 56335,
+ 55349, 56336, 55349, 56337, 55349, 56338, 55349, 56339,
+ 55349, 56340, 55349, 56341, 55349, 56342, 55349, 56343,
+ 55349, 56344, 55349, 56345, 55349, 56346, 55349, 56347,
+ 55349, 56348, 55349, 56349, 55349, 56350, 55349, 56351,
+ 55349, 56352, 55349, 56353, 55349, 56354, 55349, 56355,
+ 55349, 56356, 55349, 56357, 55349, 56358, 55349, 56359,
+ 55349, 56360, 55349, 56361, 55349, 56362, 55349, 56363,
+ 55349, 56364, 55349, 56365, 55349, 56366, 55349, 56367,
+ 55349, 56368, 55349, 56369, 55349, 56370, 55349, 56371,
+ 55349, 56372, 55349, 56373, 55349, 56374, 55349, 56375,
+ 55349, 56376, 55349, 56377, 55349, 56378, 55349, 56379,
+ 55349, 56380, 55349, 56381, 55349, 56382, 55349, 56383,
+ 55349, 56384, 55349, 56385, 55349, 56386, 55349, 56387,
+ 55349, 56388, 55349, 56389, 55349, 56390, 55349, 56391,
+ 55349, 56392, 55349, 56393, 55349, 56394, 55349, 56395,
+ 55349, 56396, 55349, 56397, 55349, 56398, 55349, 56399,
+ 55349, 56400, 55349, 56401, 55349, 56402, 55349, 56403,
+ 55349, 56404, 55349, 56406, 55349, 56407, 55349, 56408,
+ 55349, 56409, 55349, 56410, 55349, 56411, 55349, 56412,
+ 55349, 56413, 55349, 56414, 55349, 56415, 55349, 56416,
+ 55349, 56417, 55349, 56418, 55349, 56419, 55349, 56420,
+ 55349, 56421, 55349, 56422, 55349, 56423, 55349, 56424,
+ 55349, 56425, 55349, 56426, 55349, 56427, 55349, 56428,
+ 55349, 56429, 55349, 56430, 55349, 56431, 55349, 56432,
+ 55349, 56433, 55349, 56434, 55349, 56435, 55349, 56436,
+ 55349, 56437, 55349, 56438, 55349, 56439, 55349, 56440,
+ 55349, 56441, 55349, 56442, 55349, 56443, 55349, 56444,
+ 55349, 56445, 55349, 56446, 55349, 56447, 55349, 56448,
+ 55349, 56449, 55349, 56450, 55349, 56451, 55349, 56452,
+ 55349, 56453, 55349, 56454, 55349, 56455, 55349, 56456,
+ 55349, 56457, 55349, 56458, 55349, 56459, 55349, 56460,
+ 55349, 56461, 55349, 56462, 55349, 56463, 55349, 56464,
+ 55349, 56465, 55349, 56466, 55349, 56467, 55349, 56468,
+ 55349, 56469, 55349, 56470, 55349, 56471, 55349, 56472,
+ 55349, 56473, 55349, 56474, 55349, 56475, 55349, 56476,
+ 55349, 56478, 55349, 56479, 55349, 56482, 55349, 56485,
+ 55349, 56486, 55349, 56489, 55349, 56490, 55349, 56491,
+ 55349, 56492, 55349, 56494, 55349, 56495, 55349, 56496,
+ 55349, 56497, 55349, 56498, 55349, 56499, 55349, 56500,
+ 55349, 56501, 55349, 56502, 55349, 56503, 55349, 56504,
+ 55349, 56505, 55349, 56507, 55349, 56509, 55349, 56510,
+ 55349, 56511, 55349, 56512, 55349, 56513, 55349, 56514,
+ 55349, 56515, 55349, 56517, 55349, 56518, 55349, 56519,
+ 55349, 56520, 55349, 56521, 55349, 56522, 55349, 56523,
+ 55349, 56524, 55349, 56525, 55349, 56526, 55349, 56527,
+ 55349, 56528, 55349, 56529, 55349, 56530, 55349, 56531,
+ 55349, 56532, 55349, 56533, 55349, 56534, 55349, 56535,
+ 55349, 56536, 55349, 56537, 55349, 56538, 55349, 56539,
+ 55349, 56540, 55349, 56541, 55349, 56542, 55349, 56543,
+ 55349, 56544, 55349, 56545, 55349, 56546, 55349, 56547,
+ 55349, 56548, 55349, 56549, 55349, 56550, 55349, 56551,
+ 55349, 56552, 55349, 56553, 55349, 56554, 55349, 56555,
+ 55349, 56556, 55349, 56557, 55349, 56558, 55349, 56559,
+ 55349, 56560, 55349, 56561, 55349, 56562, 55349, 56563,
+ 55349, 56564, 55349, 56565, 55349, 56566, 55349, 56567,
+ 55349, 56568, 55349, 56569, 55349, 56570, 55349, 56571,
+ 55349, 56572, 55349, 56573, 55349, 56574, 55349, 56575,
+ 55349, 56576, 55349, 56577, 55349, 56578, 55349, 56579,
+ 55349, 56580, 55349, 56581, 55349, 56583, 55349, 56584,
+ 55349, 56585, 55349, 56586, 55349, 56589, 55349, 56590,
+ 55349, 56591, 55349, 56592, 55349, 56593, 55349, 56594,
+ 55349, 56595, 55349, 56596, 55349, 56598, 55349, 56599,
+ 55349, 56600, 55349, 56601, 55349, 56602, 55349, 56603,
+ 55349, 56604, 55349, 56606, 55349, 56607, 55349, 56608,
+ 55349, 56609, 55349, 56610, 55349, 56611, 55349, 56612,
+ 55349, 56613, 55349, 56614, 55349, 56615, 55349, 56616,
+ 55349, 56617, 55349, 56618, 55349, 56619, 55349, 56620,
+ 55349, 56621, 55349, 56622, 55349, 56623, 55349, 56624,
+ 55349, 56625, 55349, 56626, 55349, 56627, 55349, 56628,
+ 55349, 56629, 55349, 56630, 55349, 56631, 55349, 56632,
+ 55349, 56633, 55349, 56635, 55349, 56636, 55349, 56637,
+ 55349, 56638, 55349, 56640, 55349, 56641, 55349, 56642,
+ 55349, 56643, 55349, 56644, 55349, 56646, 55349, 56650,
+ 55349, 56651, 55349, 56652, 55349, 56653, 55349, 56654,
+ 55349, 56655, 55349, 56656, 55349, 56658, 55349, 56659,
+ 55349, 56660, 55349, 56661, 55349, 56662, 55349, 56663,
+ 55349, 56664, 55349, 56665, 55349, 56666, 55349, 56667,
+ 55349, 56668, 55349, 56669, 55349, 56670, 55349, 56671,
+ 55349, 56672, 55349, 56673, 55349, 56674, 55349, 56675,
+ 55349, 56676, 55349, 56677, 55349, 56678, 55349, 56679,
+ 55349, 56680, 55349, 56681, 55349, 56682, 55349, 56683,
+ 55349, 56684, 55349, 56685, 55349, 56686, 55349, 56687,
+ 55349, 56688, 55349, 56689, 55349, 56690, 55349, 56691,
+ 55349, 56692, 55349, 56693, 55349, 56694, 55349, 56695,
+ 55349, 56696, 55349, 56697, 55349, 56698, 55349, 56699,
+ 55349, 56700, 55349, 56701, 55349, 56702, 55349, 56703,
+ 55349, 56704, 55349, 56705, 55349, 56706, 55349, 56707,
+ 55349, 56708, 55349, 56709, 55349, 56710, 55349, 56711,
+ 55349, 56712, 55349, 56713, 55349, 56714, 55349, 56715,
+ 55349, 56716, 55349, 56717, 55349, 56718, 55349, 56719,
+ 55349, 56720, 55349, 56721, 55349, 56722, 55349, 56723,
+ 55349, 56724, 55349, 56725, 55349, 56726, 55349, 56727,
+ 55349, 56728, 55349, 56729, 55349, 56730, 55349, 56731,
+ 55349, 56732, 55349, 56733, 55349, 56734, 55349, 56735,
+ 55349, 56736, 55349, 56737, 55349, 56738, 55349, 56739,
+ 55349, 56740, 55349, 56741, 55349, 56742, 55349, 56743,
+ 55349, 56744, 55349, 56745, 55349, 56746, 55349, 56747,
+ 55349, 56748, 55349, 56749, 55349, 56750, 55349, 56751,
+ 55349, 56752, 55349, 56753, 55349, 56754, 55349, 56755,
+ 55349, 56756, 55349, 56757, 55349, 56758, 55349, 56759,
+ 55349, 56760, 55349, 56761, 55349, 56762, 55349, 56763,
+ 55349, 56764, 55349, 56765, 55349, 56766, 55349, 56767,
+ 55349, 56768, 55349, 56769, 55349, 56770, 55349, 56771,
+ 55349, 56772, 55349, 56773, 55349, 56774, 55349, 56775,
+ 55349, 56776, 55349, 56777, 55349, 56778, 55349, 56779,
+ 55349, 56780, 55349, 56781, 55349, 56782, 55349, 56783,
+ 55349, 56784, 55349, 56785, 55349, 56786, 55349, 56787,
+ 55349, 56788, 55349, 56789, 55349, 56790, 55349, 56791,
+ 55349, 56792, 55349, 56793, 55349, 56794, 55349, 56795,
+ 55349, 56796, 55349, 56797, 55349, 56798, 55349, 56799,
+ 55349, 56800, 55349, 56801, 55349, 56802, 55349, 56803,
+ 55349, 56804, 55349, 56805, 55349, 56806, 55349, 56807,
+ 55349, 56808, 55349, 56809, 55349, 56810, 55349, 56811,
+ 55349, 56812, 55349, 56813, 55349, 56814, 55349, 56815,
+ 55349, 56816, 55349, 56817, 55349, 56818, 55349, 56819,
+ 55349, 56820, 55349, 56821, 55349, 56822, 55349, 56823,
+ 55349, 56824, 55349, 56825, 55349, 56826, 55349, 56827,
+ 55349, 56828, 55349, 56829, 55349, 56830, 55349, 56831,
+ 55349, 56832, 55349, 56833, 55349, 56834, 55349, 56835,
+ 55349, 56836, 55349, 56837, 55349, 56838, 55349, 56839,
+ 55349, 56840, 55349, 56841, 55349, 56842, 55349, 56843,
+ 55349, 56844, 55349, 56845, 55349, 56846, 55349, 56847,
+ 55349, 56848, 55349, 56849, 55349, 56850, 55349, 56851,
+ 55349, 56852, 55349, 56853, 55349, 56854, 55349, 56855,
+ 55349, 56856, 55349, 56857, 55349, 56858, 55349, 56859,
+ 55349, 56860, 55349, 56861, 55349, 56862, 55349, 56863,
+ 55349, 56864, 55349, 56865, 55349, 56866, 55349, 56867,
+ 55349, 56868, 55349, 56869, 55349, 56870, 55349, 56871,
+ 55349, 56872, 55349, 56873, 55349, 56874, 55349, 56875,
+ 55349, 56876, 55349, 56877, 55349, 56878, 55349, 56879,
+ 55349, 56880, 55349, 56881, 55349, 56882, 55349, 56883,
+ 55349, 56884, 55349, 56885, 55349, 56886, 55349, 56887,
+ 55349, 56888, 55349, 56889, 55349, 56890, 55349, 56891,
+ 55349, 56892, 55349, 56893, 55349, 56894, 55349, 56895,
+ 55349, 56896, 55349, 56897, 55349, 56898, 55349, 56899,
+ 55349, 56900, 55349, 56901, 55349, 56902, 55349, 56903,
+ 55349, 56904, 55349, 56905, 55349, 56906, 55349, 56907,
+ 55349, 56908, 55349, 56909, 55349, 56910, 55349, 56911,
+ 55349, 56912, 55349, 56913, 55349, 56914, 55349, 56915,
+ 55349, 56916, 55349, 56917, 55349, 56918, 55349, 56919,
+ 55349, 56920, 55349, 56921, 55349, 56922, 55349, 56923,
+ 55349, 56924, 55349, 56925, 55349, 56926, 55349, 56927,
+ 55349, 56928, 55349, 56929, 55349, 56930, 55349, 56931,
+ 55349, 56932, 55349, 56933, 55349, 56934, 55349, 56935,
+ 55349, 56936, 55349, 56937, 55349, 56938, 55349, 56939,
+ 55349, 56940, 55349, 56941, 55349, 56942, 55349, 56943,
+ 55349, 56944, 55349, 56945, 55349, 56946, 55349, 56947,
+ 55349, 56948, 55349, 56949, 55349, 56950, 55349, 56951,
+ 55349, 56952, 55349, 56953, 55349, 56954, 55349, 56955,
+ 55349, 56956, 55349, 56957, 55349, 56958, 55349, 56959,
+ 55349, 56960, 55349, 56961, 55349, 56962, 55349, 56963,
+ 55349, 56964, 55349, 56965, 55349, 56966, 55349, 56967,
+ 55349, 56968, 55349, 56969, 55349, 56970, 55349, 56971,
+ 55349, 56972, 55349, 56973, 55349, 56974, 55349, 56975,
+ 55349, 56976, 55349, 56977, 55349, 56978, 55349, 56979,
+ 55349, 56980, 55349, 56981, 55349, 56982, 55349, 56983,
+ 55349, 56984, 55349, 56985, 55349, 56986, 55349, 56987,
+ 55349, 56988, 55349, 56989, 55349, 56990, 55349, 56991,
+ 55349, 56992, 55349, 56993, 55349, 56994, 55349, 56995,
+ 305, 55349, 56996, 55349, 56997, 55349, 57000, 55349,
+ 57001, 55349, 57002, 55349, 57003, 55349, 57004, 55349,
+ 57005, 55349, 57006, 55349, 57007, 55349, 57008, 55349,
+ 57009, 55349, 57010, 55349, 57011, 55349, 57012, 55349,
+ 57013, 55349, 57014, 55349, 57015, 55349, 57016, 1012,
+ 55349, 57017, 55349, 57018, 55349, 57019, 55349, 57020,
+ 55349, 57021, 55349, 57022, 55349, 57023, 55349, 57024,
+ 8711, 55349, 57026, 55349, 57027, 55349, 57028, 55349,
+ 57029, 55349, 57030, 55349, 57031, 55349, 57032, 55349,
+ 57033, 55349, 57034, 55349, 57035, 55349, 57036, 55349,
+ 57037, 55349, 57038, 55349, 57039, 55349, 57040, 55349,
+ 57041, 55349, 57042, 55349, 57043, 55349, 57044, 55349,
+ 57045, 55349, 57046, 55349, 57047, 55349, 57048, 55349,
+ 57049, 55349, 57050, 8706, 1013, 55349, 57052, 977,
+ 55349, 57053, 1008, 55349, 57054, 981, 55349, 57055,
+ 1009, 55349, 57056, 982, 55349, 57057, 55349, 57058,
+ 55349, 57059, 55349, 57060, 55349, 57061, 55349, 57062,
+ 55349, 57063, 55349, 57064, 55349, 57065, 55349, 57066,
+ 55349, 57067, 55349, 57068, 55349, 57069, 55349, 57070,
+ 55349, 57071, 55349, 57072, 55349, 57073, 55349, 57074,
+ 55349, 57075, 55349, 57076, 55349, 57077, 55349, 57078,
+ 55349, 57079, 55349, 57080, 55349, 57081, 55349, 57082,
+ 55349, 57084, 55349, 57085, 55349, 57086, 55349, 57087,
+ 55349, 57088, 55349, 57089, 55349, 57090, 55349, 57091,
+ 55349, 57092, 55349, 57093, 55349, 57094, 55349, 57095,
+ 55349, 57096, 55349, 57097, 55349, 57098, 55349, 57099,
+ 55349, 57100, 55349, 57101, 55349, 57102, 55349, 57103,
+ 55349, 57104, 55349, 57105, 55349, 57106, 55349, 57107,
+ 55349, 57108, 55349, 57110, 55349, 57111, 55349, 57112,
+ 55349, 57113, 55349, 57114, 55349, 57115, 55349, 57116,
+ 55349, 57117, 55349, 57118, 55349, 57119, 55349, 57120,
+ 55349, 57121, 55349, 57122, 55349, 57123, 55349, 57124,
+ 55349, 57125, 55349, 57126, 55349, 57127, 55349, 57128,
+ 55349, 57129, 55349, 57130, 55349, 57131, 55349, 57132,
+ 55349, 57133, 55349, 57134, 55349, 57135, 55349, 57136,
+ 55349, 57137, 55349, 57138, 55349, 57139, 55349, 57140,
+ 55349, 57142, 55349, 57143, 55349, 57144, 55349, 57145,
+ 55349, 57146, 55349, 57147, 55349, 57148, 55349, 57149,
+ 55349, 57150, 55349, 57151, 55349, 57152, 55349, 57153,
+ 55349, 57154, 55349, 57155, 55349, 57156, 55349, 57157,
+ 55349, 57158, 55349, 57159, 55349, 57160, 55349, 57161,
+ 55349, 57162, 55349, 57163, 55349, 57164, 55349, 57165,
+ 55349, 57166, 55349, 57168, 55349, 57169, 55349, 57170,
+ 55349, 57171, 55349, 57172, 55349, 57173, 55349, 57174,
+ 55349, 57175, 55349, 57176, 55349, 57177, 55349, 57178,
+ 55349, 57179, 55349, 57180, 55349, 57181, 55349, 57182,
+ 55349, 57183, 55349, 57184, 55349, 57185, 55349, 57186,
+ 55349, 57187, 55349, 57188, 55349, 57189, 55349, 57190,
+ 55349, 57191, 55349, 57192, 55349, 57193, 55349, 57194,
+ 55349, 57195, 55349, 57196, 55349, 57197, 55349, 57198,
+ 55349, 57200, 55349, 57201, 55349, 57202, 55349, 57203,
+ 55349, 57204, 55349, 57205, 55349, 57206, 55349, 57207,
+ 55349, 57208, 55349, 57209, 55349, 57210, 55349, 57211,
+ 55349, 57212, 55349, 57213, 55349, 57214, 55349, 57215,
+ 55349, 57216, 55349, 57217, 55349, 57218, 55349, 57219,
+ 55349, 57220, 55349, 57221, 55349, 57222, 55349, 57223,
+ 55349, 57224, 55349, 57226, 55349, 57227, 55349, 57228,
+ 55349, 57229, 55349, 57230, 55349, 57231, 55349, 57232,
+ 55349, 57233, 55349, 57234, 55349, 57235, 55349, 57236,
+ 55349, 57237, 55349, 57238, 55349, 57239, 55349, 57240,
+ 55349, 57241, 55349, 57242, 55349, 57243, 55349, 57244,
+ 55349, 57245, 55349, 57246, 55349, 57247, 55349, 57248,
+ 55349, 57249, 55349, 57250, 55349, 57251, 55349, 57252,
+ 55349, 57253, 55349, 57254, 55349, 57255, 55349, 57256,
+ 55349, 57258, 55349, 57259, 55349, 57260, 55349, 57261,
+ 55349, 57262, 55349, 57263, 55349, 57264, 55349, 57265,
+ 55349, 57266, 55349, 57267, 55349, 57268, 55349, 57269,
+ 55349, 57270, 55349, 57271, 55349, 57272, 55349, 57273,
+ 55349, 57274, 55349, 57275, 55349, 57276, 55349, 57277,
+ 55349, 57278, 55349, 57279, 55349, 57280, 55349, 57281,
+ 55349, 57282, 55349, 57284, 55349, 57285, 55349, 57286,
+ 55349, 57287, 55349, 57288, 55349, 57289, 55349, 57290,
+ 55349, 57291, 55351, 57088, 55351, 57089, 55351, 57090,
+ 55351, 57091, 55351, 57095, 55351, 57097, 55351, 57099,
+ 55351, 57100, 55351, 57101, 55351, 57102, 55351, 57103,
+ 55351, 57104, 55351, 57105, 55351, 57106, 55351, 57107,
+ 55351, 57108, 55351, 57109, 55351, 57110, 55351, 57111,
+ 55351, 57112, 55351, 57113, 55351, 57114, 55351, 57115,
+ 55351, 57116, 55351, 57117, 55351, 57125, 55351, 57126,
+ 55351, 57127, 55351, 57128, 55351, 57129, 55351, 57130,
+ 55352, 56368, 55352, 56369, 55352, 56370, 55352, 56371,
+ 55352, 56372, 55352, 56373, 55352, 56374, 55352, 56375,
+ 55352, 56376, 55352, 56377, 55352, 56378, 55352, 56379,
+ 55352, 56380, 55352, 56381, 55352, 56382, 55352, 56383,
+ 55352, 56384, 55352, 56385, 55352, 56386, 55352, 56387,
+ 55352, 56388, 55352, 56389, 55352, 56390, 55352, 56391,
+ 55352, 56392, 55352, 56393, 55352, 56394, 55352, 56395,
+ 55352, 56396, 55352, 56397, 55352, 56398, 55352, 56399,
+ 55352, 56400, 55352, 56401, 55352, 56402, 55352, 56403,
+ 55352, 56404, 55352, 56405, 55352, 56406, 55352, 56407,
+ 55352, 56408, 55352, 56409, 55352, 56410, 55352, 56411,
+ 55352, 56412, 55352, 56413, 55352, 56414, 55352, 56415,
+ 55352, 56416, 55352, 56417, 55352, 56418, 55352, 56419,
+ 55352, 56420, 55352, 56421, 55352, 56422, 55352, 56423,
+ 55352, 56424, 55352, 56425, 55352, 56426, 55352, 56427,
+ 55352, 56428, 55352, 56429, 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,
+ 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, 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, 55356, 56624, 55356, 56625, 55356, 56626,
+ 55356, 56627, 55356, 56628, 55356, 56629, 55356, 56630,
+ 55356, 56631, 55356, 56632, 55356, 56633, 55356, 56634,
+ 55356, 56635, 55356, 56636, 55356, 56637, 55356, 56638,
+ 55356, 56639, 55356, 56640, 55356, 56641, 55356, 56642,
+ 55356, 56643, 55356, 56644, 55356, 56645, 55356, 56646,
+ 55356, 56647, 55356, 56648, 55356, 56649, 72, 86,
+ 83, 68, 83, 83, 80, 80, 86, 87,
+ 67, 55356, 56656, 55356, 56657, 55356, 56658, 55356,
+ 56659, 55356, 56660, 55356, 56661, 55356, 56662, 55356,
+ 56663, 55356, 56664, 55356, 56665, 55356, 56666, 55356,
+ 56667, 55356, 56668, 55356, 56669, 55356, 56670, 55356,
+ 56671, 55356, 56672, 55356, 56673, 55356, 56674, 55356,
+ 56675, 55356, 56676, 55356, 56677, 55356, 56678, 55356,
+ 56679, 55356, 56680, 55356, 56681, 77, 67, 77,
+ 68, 77, 82, 55356, 56688, 55356, 56689, 55356,
+ 56690, 55356, 56691, 55356, 56692, 55356, 56693, 55356,
+ 56694, 55356, 56695, 55356, 56696, 55356, 56697, 55356,
+ 56698, 55356, 56699, 55356, 56700, 55356, 56701, 55356,
+ 56702, 55356, 56703, 55356, 56704, 55356, 56705, 55356,
+ 56706, 55356, 56707, 55356, 56708, 55356, 56709, 55356,
+ 56710, 55356, 56711, 55356, 56712, 55356, 56713, 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, };
static const utf8proc_uint16_t utf8proc_stage1table[] = {
0, 256, 512, 768, 1024, 1280, 1536,
@@ -1658,18 +1671,18 @@ static const utf8proc_uint16_t utf8proc_stage1table[] = {
31488, 13312, 13312, 13312, 13312, 13312, 13312, 13312,
13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312,
13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312,
- 31744, 13312, 13312, 13312, 13312, 32000, 32256, 28928,
+ 13312, 13312, 13312, 13312, 13312, 31744, 32000, 28928,
28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928,
28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928,
28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928,
28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928,
- 32512, 13312, 32768, 33024, 28928, 28928, 28928, 28928,
- 28928, 28928, 28928, 28928, 28928, 33280, 28928, 28928,
+ 32256, 13312, 32512, 32768, 28928, 28928, 28928, 28928,
+ 28928, 28928, 28928, 28928, 28928, 33024, 28928, 28928,
28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928,
- 28928, 28928, 28928, 28928, 28928, 33536, 33792, 34048,
- 34304, 34560, 34816, 35072, 35328, 35584, 35840, 36096,
- 36352, 10240, 10240, 36608, 28928, 28928, 28928, 28928,
- 36864, 37120, 37376, 37632, 28928, 37888, 38144, 28928,
+ 28928, 28928, 28928, 28928, 28928, 33280, 33536, 33792,
+ 34048, 34304, 34560, 34816, 35072, 35328, 35584, 35840,
+ 36096, 10240, 10240, 36352, 28928, 28928, 28928, 28928,
+ 36608, 36864, 37120, 37376, 28928, 37632, 37888, 38144,
38400, 38656, 38912, 28928, 28928, 39168, 39424, 39680,
28928, 39936, 40192, 40448, 40704, 40960, 41216, 41472,
41728, 41984, 42240, 42496, 42752, 28928, 28928, 28928,
@@ -1696,22 +1709,22 @@ static const utf8proc_uint16_t utf8proc_stage1table[] = {
13312, 13312, 13312, 13312, 13312, 13312, 13312, 43008,
13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312,
13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312,
- 43264, 43520, 13312, 13312, 13312, 13312, 13312, 13312,
+ 13312, 43264, 13312, 13312, 13312, 13312, 13312, 13312,
13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312,
- 13312, 13312, 13312, 13312, 13312, 13312, 13312, 43776,
+ 13312, 13312, 13312, 13312, 13312, 13312, 13312, 43520,
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, 44032, 13312, 13312, 44288,
+ 13312, 13312, 13312, 13312, 43776, 13312, 13312, 44032,
28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928,
- 28928, 44544, 44800, 45056, 28928, 28928, 28928, 28928,
+ 28928, 44288, 44544, 44800, 28928, 28928, 28928, 28928,
28928, 13312, 13312, 13312, 13312, 13312, 13312, 13312,
13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312,
- 13312, 13312, 13312, 13312, 45312, 13312, 13312, 13312,
+ 13312, 13312, 13312, 13312, 45056, 13312, 13312, 13312,
13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312,
- 13312, 13312, 13312, 13312, 45568, 28928, 28928, 28928,
- 28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928,
- 28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928,
+ 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312,
+ 13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312,
+ 13312, 13312, 13312, 13312, 13312, 45312, 28928, 28928,
28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928,
28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928,
28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928,
@@ -2057,7 +2070,7 @@ static const utf8proc_uint16_t utf8proc_stage1table[] = {
28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928,
28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928,
28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928,
- 28928, 45824, 46080, 28928, 28928, 28928, 28928, 28928,
+ 28928, 45568, 45824, 28928, 28928, 28928, 28928, 28928,
28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928,
28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928,
28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928,
@@ -2121,7 +2134,7 @@ static const utf8proc_uint16_t utf8proc_stage1table[] = {
18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176,
18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176,
18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176,
- 46336, 18176, 18176, 18176, 18176, 18176, 18176, 18176,
+ 46080, 18176, 18176, 18176, 18176, 18176, 18176, 18176,
18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176,
18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176,
18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176,
@@ -2153,7 +2166,7 @@ static const utf8proc_uint16_t utf8proc_stage1table[] = {
18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176,
18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176,
18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176,
- 46336, };
+ 46080, };
static const utf8proc_uint16_t utf8proc_stage2table[] = {
1, 1, 1, 1, 1, 1, 1,
@@ -2238,357 +2251,357 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
533, 534, 535, 536, 537, 538, 539, 540,
541, 542, 543, 544, 545, 546, 547, 548,
549, 550, 551, 552, 553, 554, 555, 556,
- 557, 558, 559, 560, 561, 349, 562, 563,
- 564, 565, 566, 567, 568, 569, 570, 571,
- 572, 573, 574, 575, 576, 577, 578, 579,
- 580, 581, 582, 583, 584, 585, 586, 587,
- 588, 589, 590, 591, 592, 593, 594, 595,
- 596, 597, 598, 598, 599, 599, 599, 599,
- 599, 600, 601, 46, 46, 602, 46, 598,
- 603, 598, 603, 603, 603, 598, 603, 598,
- 598, 604, 599, 46, 46, 46, 46, 46,
- 46, 605, 606, 607, 608, 609, 610, 46,
- 602, 611, 612, 613, 614, 615, 46, 46,
- 46, 46, 46, 46, 46, 598, 46, 599,
+ 557, 558, 559, 560, 561, 349, 349, 562,
+ 563, 564, 565, 566, 567, 568, 569, 570,
+ 571, 572, 573, 574, 575, 576, 577, 578,
+ 579, 580, 581, 582, 583, 584, 585, 586,
+ 587, 588, 589, 590, 591, 592, 593, 594,
+ 595, 596, 597, 597, 598, 598, 598, 598,
+ 598, 599, 600, 46, 46, 601, 46, 597,
+ 602, 597, 602, 602, 602, 597, 602, 597,
+ 597, 603, 598, 46, 46, 46, 46, 46,
+ 46, 604, 605, 606, 607, 608, 609, 46,
+ 601, 610, 611, 612, 613, 614, 46, 46,
+ 46, 46, 46, 46, 46, 597, 46, 598,
46, 46, 46, 46, 46, 46, 46, 46,
46, 46, 46, 46, 46, 46, 46, 46,
- 46, 616, 616, 616, 616, 616, 617, 616,
- 616, 616, 616, 616, 616, 616, 617, 617,
- 616, 617, 616, 617, 616, 616, 618, 619,
- 619, 619, 619, 618, 620, 619, 619, 619,
- 619, 619, 621, 621, 622, 622, 622, 622,
- 623, 623, 619, 619, 619, 619, 622, 622,
- 619, 622, 622, 619, 619, 624, 624, 624,
- 624, 625, 619, 619, 619, 619, 617, 617,
- 617, 626, 627, 616, 628, 629, 630, 617,
- 619, 619, 619, 617, 617, 617, 619, 619,
- 631, 617, 617, 617, 619, 619, 619, 619,
- 617, 618, 619, 619, 617, 632, 633, 633,
- 632, 633, 633, 632, 617, 617, 617, 617,
- 617, 617, 617, 617, 617, 617, 617, 617,
- 617, 634, 635, 636, 637, 638, 46, 639,
- 640, 0, 0, 641, 642, 643, 644, 645,
- 646, 0, 0, 0, 0, 647, 648, 649,
- 650, 651, 652, 653, 0, 654, 0, 655,
- 656, 657, 658, 659, 660, 661, 662, 663,
- 664, 665, 666, 667, 668, 669, 670, 671,
- 672, 673, 674, 0, 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, 700, 701, 702,
- 703, 704, 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, 74,
- 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, 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, 898, 898, 898,
- 898, 899, 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, 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, 1044, 1045, 1046, 1047, 1048,
- 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056,
- 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064,
- 1065, 0, 1066, 1067, 1068, 1069, 1070, 1071,
- 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079,
- 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087,
- 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095,
- 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103,
- 0, 0, 599, 1104, 1104, 1104, 1104, 1104,
- 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111,
- 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119,
- 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127,
- 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135,
- 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143,
- 1144, 1145, 1104, 1146, 0, 0, 78, 78,
- 10, 0, 1147, 898, 898, 898, 898, 1147,
- 898, 898, 898, 1148, 1147, 898, 898, 898,
- 898, 898, 898, 1147, 1147, 1147, 1147, 1147,
- 1147, 898, 898, 1147, 898, 898, 1148, 1149,
- 898, 1150, 1151, 1152, 1153, 1154, 1155, 1156,
- 1157, 1158, 1159, 1159, 1160, 1161, 1162, 1163,
- 1164, 1165, 1166, 1167, 1165, 898, 1147, 1165,
- 1158, 0, 0, 0, 0, 0, 0, 0,
- 0, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 0, 0, 0, 0,
- 1168, 1168, 1168, 1168, 1165, 1165, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1169, 1169, 1169, 1169, 1169, 1169, 74,
- 74, 1170, 9, 9, 1171, 14, 1172, 78,
- 78, 898, 898, 898, 898, 898, 898, 898,
- 898, 1173, 1174, 1175, 1172, 1176, 1172, 1172,
- 1172, 1177, 1177, 1178, 1179, 1180, 1181, 1182,
- 1183, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1184, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1185, 1177, 1186, 1187, 1188, 1189, 1173,
- 1174, 1175, 1190, 1191, 1192, 1192, 1193, 1147,
- 898, 898, 898, 898, 898, 1147, 898, 898,
- 1147, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
- 1194, 1194, 1194, 9, 1195, 1195, 1172, 1177,
- 1177, 1196, 1177, 1177, 1177, 1177, 1197, 1198,
- 1199, 1200, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1201, 1202, 1203, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1204, 1205, 1172, 1206, 898,
- 898, 898, 898, 898, 898, 898, 1169, 78,
- 898, 898, 898, 898, 1147, 898, 1184, 1184,
- 898, 898, 78, 1147, 898, 898, 1147, 1177,
- 1177, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 1177, 1177, 1177, 1207, 1207,
- 1177, 1172, 1172, 1172, 1172, 1172, 1172, 1172,
- 1172, 1172, 1172, 1172, 1172, 1172, 1172, 0,
- 1208, 1177, 1209, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 898, 1147, 898, 898, 1147, 898, 898,
- 1147, 1147, 1147, 898, 1147, 1147, 898, 1147,
- 898, 898, 898, 1147, 898, 1147, 898, 1147,
- 898, 1147, 898, 898, 0, 0, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1177, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1211, 1211, 1211, 1211, 1211, 1211, 1211,
- 1211, 1211, 1211, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 898, 898, 898, 898,
- 898, 898, 898, 1147, 898, 1212, 1212, 78,
- 8, 8, 8, 1212, 0, 0, 1147, 1213,
- 1213, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 898,
- 898, 898, 898, 1212, 898, 898, 898, 898,
- 898, 898, 898, 898, 898, 1212, 898, 898,
- 898, 1212, 898, 898, 898, 898, 898, 0,
- 0, 1165, 1165, 1165, 1165, 1165, 1165, 1165,
- 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165,
- 0, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1147, 1147, 1147, 0, 0, 1165,
- 0, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 0, 0, 0, 0,
- 0, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1214, 1177, 1177, 1177, 1177, 1177, 1177,
- 0, 1169, 1169, 0, 0, 0, 0, 0,
- 898, 898, 1147, 1147, 1147, 898, 898, 898,
- 898, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1184, 898, 898, 898, 898, 898,
- 1147, 1147, 1147, 1147, 1147, 898, 898, 898,
- 898, 898, 898, 898, 898, 898, 898, 898,
- 898, 898, 898, 1169, 1147, 898, 898, 1147,
- 898, 898, 1147, 898, 898, 898, 1147, 1147,
- 1147, 1187, 1188, 1189, 898, 898, 898, 1147,
- 898, 898, 1147, 1147, 898, 898, 898, 898,
- 898, 1210, 1210, 1210, 1215, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 1216, 1216,
- 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
- 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
- 1216, 1217, 1218, 1216, 1216, 1216, 1216, 1216,
- 1216, 1219, 1220, 1216, 1221, 1222, 1216, 1216,
- 1216, 1216, 1216, 1210, 1215, 1223, 349, 1215,
- 1215, 1215, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1215, 1215, 1215, 1215, 1224, 1215,
- 1215, 349, 898, 1147, 898, 898, 1210, 1210,
- 1210, 1225, 1226, 1227, 1228, 1229, 1230, 1231,
- 1232, 349, 349, 1210, 1210, 1104, 1104, 1233,
- 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1104, 599, 349, 349, 349, 349, 349,
- 349, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
- 1216, 349, 1210, 1215, 1215, 0, 349, 349,
+ 46, 615, 615, 615, 615, 615, 616, 615,
+ 615, 615, 615, 615, 615, 615, 616, 616,
+ 615, 616, 615, 616, 615, 615, 617, 618,
+ 618, 618, 618, 617, 619, 618, 618, 618,
+ 618, 618, 620, 620, 621, 621, 621, 621,
+ 622, 622, 618, 618, 618, 618, 621, 621,
+ 618, 621, 621, 618, 618, 623, 623, 623,
+ 623, 624, 618, 618, 618, 618, 616, 616,
+ 616, 625, 626, 615, 627, 628, 629, 616,
+ 618, 618, 618, 616, 616, 616, 618, 618,
+ 630, 616, 616, 616, 618, 618, 618, 618,
+ 616, 617, 618, 618, 616, 631, 632, 632,
+ 631, 632, 632, 631, 616, 616, 616, 616,
+ 616, 616, 616, 616, 616, 616, 616, 616,
+ 616, 633, 634, 635, 636, 637, 46, 638,
+ 639, 0, 0, 640, 641, 642, 643, 644,
+ 645, 0, 0, 0, 0, 646, 647, 648,
+ 649, 650, 651, 652, 0, 653, 0, 654,
+ 655, 656, 657, 658, 659, 660, 661, 662,
+ 663, 664, 665, 666, 667, 668, 669, 670,
+ 671, 672, 673, 0, 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, 700, 701,
+ 702, 703, 704, 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, 74,
+ 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, 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, 897, 897, 897,
+ 897, 898, 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, 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, 1044, 1045, 1046, 1047,
+ 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055,
+ 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063,
+ 1064, 0, 1065, 1066, 1067, 1068, 1069, 1070,
+ 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078,
+ 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086,
+ 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094,
+ 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102,
+ 0, 0, 598, 1103, 1103, 1103, 1103, 1103,
+ 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110,
+ 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118,
+ 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126,
+ 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134,
+ 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142,
+ 1143, 1144, 1103, 1145, 0, 0, 78, 78,
+ 10, 0, 1146, 897, 897, 897, 897, 1146,
+ 897, 897, 897, 1147, 1146, 897, 897, 897,
+ 897, 897, 897, 1146, 1146, 1146, 1146, 1146,
+ 1146, 897, 897, 1146, 897, 897, 1147, 1148,
+ 897, 1149, 1150, 1151, 1152, 1153, 1154, 1155,
+ 1156, 1157, 1158, 1158, 1159, 1160, 1161, 1162,
+ 1163, 1164, 1165, 1166, 1164, 897, 1146, 1164,
+ 1157, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 0, 0, 0, 0,
+ 1167, 1167, 1167, 1167, 1164, 1164, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1168, 1168, 1168, 1168, 1168, 1168, 74,
+ 74, 1169, 9, 9, 1170, 14, 1171, 78,
+ 78, 897, 897, 897, 897, 897, 897, 897,
+ 897, 1172, 1173, 1174, 1171, 1175, 1171, 1171,
+ 1171, 1176, 1176, 1177, 1178, 1179, 1180, 1181,
+ 1182, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1183, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1184, 1176, 1185, 1186, 1187, 1188, 1172,
+ 1173, 1174, 1189, 1190, 1191, 1191, 1192, 1146,
+ 897, 897, 897, 897, 897, 1146, 897, 897,
+ 1146, 1193, 1193, 1193, 1193, 1193, 1193, 1193,
+ 1193, 1193, 1193, 9, 1194, 1194, 1171, 1176,
+ 1176, 1195, 1176, 1176, 1176, 1176, 1196, 1197,
+ 1198, 1199, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1200, 1201, 1202, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1203, 1204, 1171, 1205, 897,
+ 897, 897, 897, 897, 897, 897, 1168, 78,
+ 897, 897, 897, 897, 1146, 897, 1183, 1183,
+ 897, 897, 78, 1146, 897, 897, 1146, 1176,
+ 1176, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 1176, 1176, 1176, 1206, 1206,
+ 1176, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
+ 1171, 1171, 1171, 1171, 1171, 1171, 1171, 0,
+ 1207, 1176, 1208, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 897, 1146, 897, 897, 1146, 897, 897,
+ 1146, 1146, 1146, 897, 1146, 1146, 897, 1146,
+ 897, 897, 897, 1146, 897, 1146, 897, 1146,
+ 897, 1146, 897, 897, 0, 0, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1176, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
+ 1210, 1210, 1210, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 897, 897, 897, 897,
+ 897, 897, 897, 1146, 897, 1211, 1211, 78,
+ 8, 8, 8, 1211, 0, 0, 1146, 1212,
+ 1212, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 897,
+ 897, 897, 897, 1211, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 1211, 897, 897,
+ 897, 1211, 897, 897, 897, 897, 897, 0,
+ 0, 1164, 1164, 1164, 1164, 1164, 1164, 1164,
+ 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164,
+ 0, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1146, 1146, 1146, 0, 0, 1164,
+ 0, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 0, 0, 0, 0,
+ 0, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1213, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1168, 1168, 0, 0, 0, 0, 0,
+ 897, 897, 1146, 1146, 1146, 897, 897, 897,
+ 897, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1183, 897, 897, 897, 897, 897,
+ 1146, 1146, 1146, 1146, 1146, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 1168, 1146, 897, 897, 1146,
+ 897, 897, 1146, 897, 897, 897, 1146, 1146,
+ 1146, 1186, 1187, 1188, 897, 897, 897, 1146,
+ 897, 897, 1146, 1146, 897, 897, 897, 897,
+ 897, 1209, 1209, 1209, 1214, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1216, 1217, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1218, 1219, 1215, 1220, 1221, 1215, 1215,
+ 1215, 1215, 1215, 1209, 1214, 1222, 349, 1214,
+ 1214, 1214, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1214, 1214, 1214, 1214, 1223, 1214,
+ 1214, 349, 897, 1146, 897, 897, 1209, 1209,
+ 1209, 1224, 1225, 1226, 1227, 1228, 1229, 1230,
+ 1231, 349, 349, 1209, 1209, 1103, 1103, 1232,
+ 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1103, 598, 349, 349, 349, 349, 349,
+ 349, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 349, 1209, 1214, 1214, 0, 349, 349,
349, 349, 349, 349, 349, 349, 0, 0,
- 349, 349, 0, 0, 349, 349, 1216, 1216,
- 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
- 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
- 1216, 1216, 0, 1216, 1216, 1216, 1216, 1216,
- 1216, 1216, 0, 1216, 0, 0, 0, 1216,
- 1216, 1216, 1216, 0, 0, 1234, 349, 1235,
- 1215, 1215, 1210, 1210, 1210, 1210, 0, 0,
- 1236, 1215, 0, 0, 1237, 1238, 1224, 349,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1235, 0, 0, 0, 0, 1239, 1240, 0,
- 1241, 349, 349, 1210, 1210, 0, 0, 1233,
- 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1216, 1216, 10, 10, 1242, 1242, 1242,
- 1242, 1242, 1242, 897, 10, 349, 1104, 898,
- 0, 0, 1210, 1210, 1215, 0, 349, 349,
+ 349, 349, 0, 0, 349, 349, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 0, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 0, 1215, 0, 0, 0, 1215,
+ 1215, 1215, 1215, 0, 0, 1233, 349, 1234,
+ 1214, 1214, 1209, 1209, 1209, 1209, 0, 0,
+ 1235, 1214, 0, 0, 1236, 1237, 1223, 349,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 1234, 0, 0, 0, 0, 1238, 1239, 0,
+ 1240, 349, 349, 1209, 1209, 0, 0, 1232,
+ 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1215, 1215, 10, 10, 1241, 1241, 1241,
+ 1241, 1241, 1241, 896, 10, 349, 1103, 897,
+ 0, 0, 1209, 1209, 1214, 0, 349, 349,
349, 349, 349, 349, 0, 0, 0, 0,
349, 349, 0, 0, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 0, 349, 349, 349, 349, 349,
- 349, 349, 0, 349, 1243, 0, 349, 1244,
- 0, 349, 349, 0, 0, 1234, 0, 1215,
- 1215, 1215, 1210, 1210, 0, 0, 0, 0,
- 1210, 1210, 0, 0, 1210, 1210, 1245, 0,
- 0, 0, 1210, 0, 0, 0, 0, 0,
- 0, 0, 1246, 1247, 1248, 349, 0, 1249,
- 0, 0, 0, 0, 0, 0, 0, 1233,
- 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1210, 1210, 349, 349, 349, 1210, 1104,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1210, 1210, 1215, 0, 349, 349,
+ 349, 349, 0, 349, 1242, 0, 349, 1243,
+ 0, 349, 349, 0, 0, 1233, 0, 1214,
+ 1214, 1214, 1209, 1209, 0, 0, 0, 0,
+ 1209, 1209, 0, 0, 1209, 1209, 1244, 0,
+ 0, 0, 1209, 0, 0, 0, 0, 0,
+ 0, 0, 1245, 1246, 1247, 349, 0, 1248,
+ 0, 0, 0, 0, 0, 0, 0, 1232,
+ 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1209, 1209, 349, 349, 349, 1209, 1103,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1209, 1209, 1214, 0, 349, 349,
349, 349, 349, 349, 349, 349, 349, 0,
- 349, 349, 349, 0, 349, 349, 1216, 1216,
- 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
- 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
- 1216, 1216, 0, 1216, 1216, 1216, 1216, 1216,
- 1216, 1216, 0, 1216, 1216, 0, 1216, 1216,
- 1216, 1216, 1216, 0, 0, 1234, 349, 1215,
- 1215, 1215, 1210, 1210, 1210, 1210, 1210, 0,
- 1210, 1210, 1215, 0, 1215, 1215, 1224, 0,
+ 349, 349, 349, 0, 349, 349, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 0, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 0, 1215, 1215, 0, 1215, 1215,
+ 1215, 1215, 1215, 0, 0, 1233, 349, 1214,
+ 1214, 1214, 1209, 1209, 1209, 1209, 1209, 0,
+ 1209, 1209, 1214, 0, 1214, 1214, 1223, 0,
0, 349, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 349, 349, 1210, 1210, 0, 0, 1233,
- 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1104, 10, 0, 0, 0, 0, 0,
- 0, 0, 1216, 1210, 1210, 1210, 1210, 1210,
- 1210, 0, 1210, 1215, 1215, 0, 349, 349,
+ 0, 349, 349, 1209, 1209, 0, 0, 1232,
+ 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1103, 10, 0, 0, 0, 0, 0,
+ 0, 0, 1215, 1209, 1209, 1209, 1209, 1209,
+ 1209, 0, 1209, 1214, 1214, 0, 349, 349,
349, 349, 349, 349, 349, 349, 0, 0,
- 349, 349, 0, 0, 349, 349, 1216, 1216,
- 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
- 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
- 1216, 1216, 0, 1216, 1216, 1216, 1216, 1216,
- 1216, 1216, 0, 1216, 1216, 0, 1216, 1216,
- 1216, 1216, 1216, 0, 0, 1234, 349, 1235,
- 1210, 1215, 1210, 1210, 1210, 1210, 0, 0,
- 1250, 1251, 0, 0, 1252, 1253, 1224, 0,
- 0, 0, 0, 0, 0, 0, 1210, 1254,
- 1235, 0, 0, 0, 0, 1255, 1256, 0,
- 1216, 349, 349, 1210, 1210, 0, 0, 1233,
- 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 897, 1216, 1242, 1242, 1242, 1242, 1242,
- 1242, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1210, 349, 0, 349, 349,
+ 349, 349, 0, 0, 349, 349, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 0, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 0, 1215, 1215, 0, 1215, 1215,
+ 1215, 1215, 1215, 0, 0, 1233, 349, 1234,
+ 1209, 1214, 1209, 1209, 1209, 1209, 0, 0,
+ 1249, 1250, 0, 0, 1251, 1252, 1223, 0,
+ 0, 0, 0, 0, 0, 0, 1209, 1253,
+ 1234, 0, 0, 0, 0, 1254, 1255, 0,
+ 1215, 349, 349, 1209, 1209, 0, 0, 1232,
+ 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 896, 1215, 1241, 1241, 1241, 1241, 1241,
+ 1241, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1209, 349, 0, 349, 349,
349, 349, 349, 349, 0, 0, 0, 349,
- 349, 349, 0, 1257, 349, 1258, 349, 0,
+ 349, 349, 0, 1256, 349, 1257, 349, 0,
0, 0, 349, 349, 0, 349, 0, 349,
349, 0, 0, 0, 349, 349, 0, 0,
0, 349, 349, 349, 0, 0, 0, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 0, 0, 0, 0, 1235,
- 1215, 1210, 1215, 1215, 0, 0, 0, 1259,
- 1260, 1215, 0, 1261, 1262, 1263, 1245, 0,
+ 349, 349, 349, 0, 0, 0, 0, 1234,
+ 1214, 1209, 1214, 1214, 0, 0, 0, 1258,
+ 1259, 1214, 0, 1260, 1261, 1262, 1244, 0,
0, 349, 0, 0, 0, 0, 0, 0,
- 1235, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1233,
- 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1242, 1242, 1242, 78, 78, 78, 78,
+ 1234, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1232,
+ 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1241, 1241, 1241, 78, 78, 78, 78,
78, 78, 10, 78, 0, 0, 0, 0,
- 0, 1210, 1215, 1215, 1215, 1210, 349, 349,
+ 0, 1209, 1214, 1214, 1214, 1209, 349, 349,
349, 349, 349, 349, 349, 349, 0, 349,
- 349, 349, 0, 349, 349, 349, 1216, 1216,
- 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
- 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
- 1216, 1216, 0, 1216, 1216, 1216, 1216, 1216,
- 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
- 1216, 1216, 1216, 0, 0, 1234, 349, 1210,
- 1210, 1210, 1215, 1215, 1215, 1215, 0, 1264,
- 1210, 1265, 0, 1210, 1210, 1210, 1224, 0,
- 0, 0, 0, 0, 0, 0, 1266, 1267,
- 0, 1216, 1216, 1216, 0, 0, 349, 0,
- 0, 349, 349, 1210, 1210, 0, 0, 1233,
- 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 0, 0, 0, 0, 0, 0, 0,
- 1104, 1268, 1268, 1268, 1268, 1268, 1268, 1268,
- 897, 349, 1210, 1215, 1215, 1104, 349, 349,
+ 349, 349, 0, 349, 349, 349, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 0, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 0, 0, 1233, 349, 1209,
+ 1209, 1209, 1214, 1214, 1214, 1214, 0, 1263,
+ 1209, 1264, 0, 1209, 1209, 1209, 1223, 0,
+ 0, 0, 0, 0, 0, 0, 1265, 1266,
+ 0, 1215, 1215, 1215, 0, 349, 349, 0,
+ 0, 349, 349, 1209, 1209, 0, 0, 1232,
+ 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 0, 0, 0, 0, 0, 0, 0,
+ 1103, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
+ 896, 349, 1209, 1214, 1214, 1103, 349, 349,
349, 349, 349, 349, 349, 349, 0, 349,
349, 349, 0, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 0, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 0, 349, 349,
- 349, 349, 349, 0, 0, 1234, 349, 1215,
- 1269, 1270, 1215, 1235, 1215, 1215, 0, 1271,
- 1272, 1273, 0, 1274, 1275, 1210, 1245, 0,
- 0, 0, 0, 0, 0, 0, 1235, 1235,
- 0, 0, 0, 0, 0, 0, 349, 349,
- 0, 349, 349, 1210, 1210, 0, 0, 1233,
- 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 0, 349, 349, 1215, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1210, 1210, 1215, 1215, 349, 349, 349,
+ 349, 349, 349, 0, 0, 1233, 349, 1214,
+ 1268, 1269, 1214, 1234, 1214, 1214, 0, 1270,
+ 1271, 1272, 0, 1273, 1274, 1209, 1244, 0,
+ 0, 0, 0, 0, 0, 0, 1234, 1234,
+ 0, 0, 0, 0, 0, 349, 349, 349,
+ 0, 349, 349, 1209, 1209, 0, 0, 1232,
+ 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 0, 349, 349, 1214, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1209, 1209, 1214, 1214, 349, 349, 349,
349, 349, 349, 349, 349, 349, 0, 349,
- 349, 349, 0, 349, 349, 349, 1216, 1216,
- 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
- 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
- 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
- 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
- 1216, 1216, 1216, 1216, 1245, 1245, 349, 1235,
- 1215, 1215, 1210, 1210, 1210, 1210, 0, 1276,
- 1277, 1215, 0, 1278, 1279, 1280, 1224, 1281,
- 897, 0, 0, 0, 0, 349, 349, 349,
- 1235, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
- 349, 349, 349, 1210, 1210, 0, 0, 1233,
- 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
- 1242, 1242, 897, 349, 349, 349, 349, 349,
- 349, 0, 1210, 1215, 1215, 0, 349, 349,
+ 349, 349, 0, 349, 349, 349, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1244, 1244, 349, 1234,
+ 1214, 1214, 1209, 1209, 1209, 1209, 0, 1275,
+ 1276, 1214, 0, 1277, 1278, 1279, 1223, 1280,
+ 896, 0, 0, 0, 0, 349, 349, 349,
+ 1234, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
+ 349, 349, 349, 1209, 1209, 0, 0, 1232,
+ 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 896, 349, 349, 349, 349, 349,
+ 349, 0, 1209, 1214, 1214, 0, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
0, 0, 0, 349, 349, 349, 349, 349,
@@ -2597,12 +2610,12 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 0, 349, 349, 349, 349,
349, 349, 349, 349, 349, 0, 349, 0,
0, 349, 349, 349, 349, 349, 349, 349,
- 0, 0, 0, 1282, 0, 0, 0, 0,
- 1235, 1215, 1215, 1210, 1210, 1210, 0, 1210,
- 0, 1215, 1283, 1284, 1215, 1285, 1286, 1287,
- 1235, 0, 0, 0, 0, 0, 0, 1233,
- 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 0, 0, 1215, 1215, 1104, 0, 0,
+ 0, 0, 0, 1281, 0, 0, 0, 0,
+ 1234, 1214, 1214, 1209, 1209, 1209, 0, 1209,
+ 0, 1214, 1282, 1283, 1214, 1284, 1285, 1286,
+ 1234, 0, 0, 0, 0, 0, 0, 1232,
+ 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 0, 0, 1214, 1214, 1103, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
@@ -2610,12 +2623,12 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 1210, 349, 1288, 1210, 1210, 1210,
- 1210, 1289, 1289, 1245, 0, 0, 0, 0,
- 10, 349, 349, 349, 349, 349, 349, 599,
- 1210, 1290, 1290, 1290, 1290, 1210, 1210, 1210,
- 1104, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 1104, 1104, 0, 0, 0,
+ 349, 349, 1209, 349, 1287, 1209, 1209, 1209,
+ 1209, 1288, 1288, 1244, 0, 0, 0, 0,
+ 10, 349, 349, 349, 349, 349, 349, 598,
+ 1209, 1289, 1289, 1289, 1289, 1209, 1209, 1209,
+ 1103, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 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,
@@ -2626,93 +2639,102 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 0, 349, 0,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 1210, 349, 1291, 1210, 1210, 1210,
- 1210, 1292, 1292, 1245, 1210, 1210, 349, 0,
- 0, 349, 349, 349, 349, 349, 0, 599,
- 0, 1293, 1293, 1293, 1293, 1210, 1210, 1210,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 1294, 1295, 349,
+ 349, 349, 1209, 349, 1290, 1209, 1209, 1209,
+ 1209, 1291, 1291, 1244, 1209, 1209, 349, 0,
+ 0, 349, 349, 349, 349, 349, 0, 598,
+ 0, 1292, 1292, 1292, 1292, 1209, 1209, 1209,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 1293, 1294, 349,
349, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 349, 897, 897, 897, 1104, 1104, 1104,
- 1104, 1104, 1104, 1104, 1104, 1296, 1104, 1104,
- 1104, 1104, 1104, 1104, 897, 1104, 897, 897,
- 897, 1147, 1147, 897, 897, 897, 897, 897,
- 897, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 1242, 1242, 1242, 1242, 1242,
- 1242, 1242, 1242, 1242, 1242, 897, 1147, 897,
- 1147, 897, 1297, 11, 12, 11, 12, 1215,
- 1215, 349, 349, 349, 1298, 349, 349, 349,
- 349, 0, 349, 349, 349, 349, 1299, 349,
- 349, 349, 349, 1300, 349, 349, 349, 349,
- 1301, 349, 349, 349, 349, 1302, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 1303, 349, 349, 349, 0, 0,
- 0, 0, 1304, 1305, 1306, 1307, 1308, 1309,
- 1310, 1311, 1312, 1305, 1305, 1305, 1305, 1210,
- 1215, 1305, 1313, 898, 898, 1245, 1104, 898,
- 898, 349, 349, 349, 349, 349, 1210, 1210,
- 1210, 1210, 1210, 1210, 1314, 1210, 1210, 1210,
- 1210, 0, 1210, 1210, 1210, 1210, 1315, 1210,
- 1210, 1210, 1210, 1316, 1210, 1210, 1210, 1210,
- 1317, 1210, 1210, 1210, 1210, 1318, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1319, 1210, 1210, 1210, 0, 897,
- 897, 897, 897, 897, 897, 897, 897, 1147,
- 897, 897, 897, 897, 897, 897, 0, 897,
- 897, 1104, 1104, 1104, 1104, 1104, 897, 897,
- 897, 897, 1104, 1104, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 1320, 1321,
- 349, 349, 349, 349, 1322, 1322, 1210, 1254,
- 1210, 1210, 1215, 1210, 1210, 1210, 1210, 1210,
- 1234, 1322, 1245, 1245, 1215, 1215, 1210, 1210,
- 349, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 1104, 1104, 1104, 1104, 1104,
- 1104, 349, 349, 349, 349, 349, 349, 1215,
- 1215, 1210, 1210, 349, 349, 349, 349, 1210,
- 1210, 1210, 349, 1322, 1322, 1322, 349, 349,
- 1322, 1322, 1322, 1322, 1322, 1322, 1322, 349,
- 349, 349, 1210, 1210, 1210, 1210, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 1210, 1322, 1215, 1210, 1210,
- 1322, 1322, 1322, 1322, 1322, 1322, 1147, 349,
- 1322, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 1322, 1322, 1322, 1210, 897,
- 897, 1323, 1324, 1325, 1326, 1327, 1328, 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, 0,
- 1361, 0, 0, 0, 0, 0, 1362, 0,
- 0, 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, 1104, 1406, 1407, 1408,
- 1409, 1410, 1410, 1410, 1410, 1410, 1410, 1410,
- 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410,
- 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410,
- 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410,
- 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410,
- 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410,
- 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410,
- 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410,
- 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410,
- 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410,
- 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410,
- 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410,
- 1411, 1412, 1413, 1413, 1413, 1413, 1413, 1413,
+ 0, 349, 896, 896, 896, 1103, 1103, 1103,
+ 1103, 1103, 1103, 1103, 1103, 1295, 1103, 1103,
+ 1103, 1103, 1103, 1103, 896, 1103, 896, 896,
+ 896, 1146, 1146, 896, 896, 896, 896, 896,
+ 896, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 1241, 1241, 896, 1146, 896,
+ 1146, 896, 1296, 11, 12, 11, 12, 1214,
+ 1214, 349, 349, 349, 1297, 349, 349, 349,
+ 349, 0, 349, 349, 349, 349, 1298, 349,
+ 349, 349, 349, 1299, 349, 349, 349, 349,
+ 1300, 349, 349, 349, 349, 1301, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 1302, 349, 349, 349, 0, 0,
+ 0, 0, 1303, 1304, 1305, 1306, 1307, 1308,
+ 1309, 1310, 1311, 1304, 1304, 1304, 1304, 1209,
+ 1214, 1304, 1312, 897, 897, 1244, 1103, 897,
+ 897, 349, 349, 349, 349, 349, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1313, 1209, 1209, 1209,
+ 1209, 0, 1209, 1209, 1209, 1209, 1314, 1209,
+ 1209, 1209, 1209, 1315, 1209, 1209, 1209, 1209,
+ 1316, 1209, 1209, 1209, 1209, 1317, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1318, 1209, 1209, 1209, 0, 896,
+ 896, 896, 896, 896, 896, 896, 896, 1146,
+ 896, 896, 896, 896, 896, 896, 0, 896,
+ 896, 1103, 1103, 1103, 1103, 1103, 896, 896,
+ 896, 896, 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, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1319, 1320,
+ 1215, 1215, 1215, 1215, 1321, 1321, 1209, 1253,
+ 1209, 1209, 1214, 1209, 1209, 1209, 1209, 1209,
+ 1233, 1321, 1223, 1244, 1214, 1214, 1209, 1209,
+ 1215, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 1103, 1103, 1103, 1103, 1103,
+ 1103, 1215, 1215, 1215, 1215, 1215, 1215, 1214,
+ 1214, 1209, 1209, 1215, 1215, 1215, 1215, 1209,
+ 1209, 1209, 1215, 1321, 1321, 1321, 1215, 1215,
+ 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1215,
+ 1215, 1215, 1209, 1209, 1209, 1209, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1209, 1321, 1214, 1209, 1209,
+ 1321, 1321, 1321, 1321, 1321, 1321, 1146, 1215,
+ 1321, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 1321, 1321, 1321, 1209, 896,
+ 896, 1322, 1323, 1324, 1325, 1326, 1327, 1328,
+ 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, 0,
+ 1360, 0, 0, 0, 0, 0, 1361, 0,
+ 0, 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, 1103, 1405, 1406, 1407,
+ 1408, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+ 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+ 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+ 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+ 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+ 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+ 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+ 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+ 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+ 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+ 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+ 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+ 1410, 1411, 1412, 1412, 1412, 1412, 1412, 1412,
+ 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+ 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+ 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+ 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+ 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+ 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+ 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+ 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+ 1412, 1413, 1413, 1413, 1413, 1413, 1413, 1413,
1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413,
1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413,
1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413,
@@ -2721,18 +2743,9 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413,
1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413,
1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413,
- 1413, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
- 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
- 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
- 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
- 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
- 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
- 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
- 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
- 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
- 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
- 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
- 1414, 349, 349, 349, 349, 349, 349, 349,
+ 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413,
+ 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413,
+ 1413, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
@@ -2775,28 +2788,28 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 0, 0, 898, 898,
- 898, 1104, 1104, 1104, 1104, 1104, 1104, 1104,
- 1104, 1104, 1242, 1242, 1242, 1242, 1242, 1242,
- 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
- 1242, 1242, 1242, 1242, 1242, 1242, 0, 0,
+ 349, 349, 349, 349, 0, 0, 897, 897,
+ 897, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+ 1103, 1103, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 1241, 1241, 1241, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 0, 0, 0, 0, 0,
- 0, 1415, 1416, 1417, 1418, 1419, 1420, 1421,
- 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429,
- 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437,
- 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445,
- 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453,
- 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461,
- 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469,
- 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477,
- 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485,
- 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493,
- 1494, 1495, 1496, 1497, 1498, 1499, 1500, 0,
- 0, 1501, 1502, 1503, 1504, 1505, 1506, 0,
- 0, 1146, 349, 349, 349, 349, 349, 349,
+ 0, 1414, 1415, 1416, 1417, 1418, 1419, 1420,
+ 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428,
+ 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436,
+ 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444,
+ 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452,
+ 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460,
+ 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468,
+ 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476,
+ 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484,
+ 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492,
+ 1493, 1494, 1495, 1496, 1497, 1498, 1499, 0,
+ 0, 1500, 1501, 1502, 1503, 1504, 1505, 0,
+ 0, 1145, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
@@ -2873,7 +2886,7 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 897, 1104,
+ 349, 349, 349, 349, 349, 349, 896, 1103,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 7, 349, 349, 349, 349, 349, 349,
@@ -2889,50 +2902,50 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 1104, 1104, 1104, 1507,
- 1507, 1507, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 1103, 1103, 1103, 1506,
+ 1506, 1506, 349, 349, 349, 349, 349, 349,
349, 349, 0, 0, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 1210, 1210, 1245, 1508, 0,
+ 349, 349, 349, 1209, 1209, 1244, 1507, 0,
0, 0, 0, 0, 0, 0, 0, 0,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 1210, 1210, 1508, 1104, 1104,
+ 349, 349, 349, 1209, 1209, 1507, 1103, 1103,
0, 0, 0, 0, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 1210, 1210, 0, 0, 0,
+ 349, 349, 349, 1209, 1209, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 0, 349,
- 349, 349, 0, 1210, 1210, 0, 0, 0,
+ 349, 349, 0, 1209, 1209, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1508, 1508, 1214,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1214,
+ 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1209,
+ 1214, 1214, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1223, 1209, 1103, 1103, 1103,
+ 598, 1103, 1103, 1103, 10, 349, 897, 0,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 0,
+ 0, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
+ 1267, 1267, 1267, 0, 0, 0, 0, 0,
+ 0, 8, 8, 8, 8, 8, 8, 1145,
+ 8, 8, 8, 8, 1508, 1508, 1508, 1509,
+ 1508, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 1509, 1509, 1215,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1215,
- 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1210,
- 1215, 1215, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1245, 1210, 1104, 1104, 1104,
- 599, 1104, 1104, 1104, 10, 349, 898, 0,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 0,
- 0, 1268, 1268, 1268, 1268, 1268, 1268, 1268,
- 1268, 1268, 1268, 0, 0, 0, 0, 0,
- 0, 8, 8, 8, 8, 8, 8, 1146,
- 8, 8, 8, 8, 1509, 1509, 1509, 1510,
- 1509, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 0,
- 0, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 599, 349, 349, 349,
+ 349, 349, 349, 349, 598, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
@@ -2940,12 +2953,12 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 0, 0, 0, 0, 0, 0,
- 0, 349, 349, 349, 349, 349, 1210, 1210,
+ 0, 349, 349, 349, 349, 349, 1209, 1209,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 1149, 349, 0, 0, 0, 0,
+ 349, 349, 1148, 349, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
@@ -2960,13 +2973,13 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 0, 1210, 1210, 1210, 1215, 1215, 1215, 1215,
- 1210, 1210, 1215, 1215, 1215, 0, 0, 0,
- 0, 1215, 1215, 1210, 1215, 1215, 1215, 1215,
- 1215, 1215, 1148, 898, 1147, 0, 0, 0,
- 0, 78, 0, 0, 0, 8, 8, 1233,
- 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 349, 349, 349, 349, 349, 349, 349,
+ 0, 1209, 1209, 1209, 1214, 1214, 1214, 1214,
+ 1209, 1209, 1214, 1214, 1214, 0, 0, 0,
+ 0, 1214, 1214, 1209, 1214, 1214, 1214, 1214,
+ 1214, 1214, 1147, 897, 1146, 0, 0, 0,
+ 0, 78, 0, 0, 0, 8, 8, 1232,
+ 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 0,
@@ -2982,8 +2995,8 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 0, 0, 0, 0, 0,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 1242, 0, 0, 0, 78,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 1241, 0, 0, 0, 78,
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
@@ -2991,132 +3004,132 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
78, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 898, 1147, 1215, 1215, 1210, 0, 0, 1104,
- 1104, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 1215, 1210,
- 1215, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 0, 1245, 1322, 1210, 1322, 1322, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1215, 1215,
- 1215, 1215, 1215, 1215, 1210, 1210, 898, 898,
- 898, 898, 898, 898, 898, 898, 0, 0,
- 1147, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 0,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 0,
- 0, 1104, 1104, 1104, 1104, 1104, 1104, 1104,
- 599, 1104, 1104, 1104, 1104, 1104, 1104, 0,
- 0, 898, 898, 898, 898, 898, 1147, 1147,
- 1147, 1147, 1147, 1147, 898, 898, 1147, 899,
- 1147, 1147, 898, 898, 1147, 1147, 898, 898,
- 898, 898, 898, 1147, 898, 898, 898, 898,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
+ 897, 1146, 1214, 1214, 1209, 0, 0, 1103,
+ 1103, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1214, 1209,
+ 1214, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 0, 1223, 1321, 1209, 1321, 1321, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1214, 1214,
+ 1214, 1214, 1214, 1214, 1209, 1209, 897, 897,
+ 897, 897, 897, 897, 897, 897, 0, 0,
+ 1146, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 0,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 0,
+ 0, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+ 598, 1103, 1103, 1103, 1103, 1103, 1103, 0,
+ 0, 897, 897, 897, 897, 897, 1146, 1146,
+ 1146, 1146, 1146, 1146, 897, 897, 1146, 898,
+ 1146, 1146, 897, 897, 1146, 1146, 897, 897,
+ 897, 897, 897, 1146, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 1146, 0,
+ 0, 897, 897, 897, 897, 897, 897, 1146,
+ 897, 897, 897, 897, 1510, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1210, 1210, 1210, 1210, 1215, 1511, 1512,
+ 0, 1209, 1209, 1209, 1209, 1214, 1511, 1512,
1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520,
- 349, 349, 1521, 1522, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 1234, 1235, 1210,
- 1210, 1210, 1210, 1523, 1524, 1525, 1526, 1527,
- 1528, 1529, 1530, 1531, 1532, 1508, 349, 349,
- 349, 349, 349, 349, 349, 349, 0, 1104,
- 1104, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 1104, 1104, 1104, 1104, 1104,
- 1104, 1104, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 898, 1147, 898, 898,
- 898, 898, 898, 898, 898, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 1104, 1104,
- 1104, 1210, 1210, 1215, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 1215, 1210, 1210, 1210, 1210, 1215,
- 1215, 1210, 1210, 1508, 1245, 1210, 1210, 349,
- 349, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 1234,
- 1215, 1210, 1210, 1215, 1215, 1215, 1210, 1215,
- 1210, 1210, 1210, 1508, 1508, 0, 0, 0,
- 0, 0, 0, 0, 0, 1104, 1104, 1104,
- 1104, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 1215, 1215, 1215,
- 1215, 1215, 1215, 1215, 1215, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1215, 1215, 1210,
- 1234, 0, 0, 0, 1104, 1104, 1104, 1104,
- 1104, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 349, 349,
- 349, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 599, 599, 599, 599, 599, 599, 1104,
- 1104, 1533, 1534, 1535, 1536, 1537, 1537, 1538,
- 1539, 1540, 1541, 1542, 0, 0, 0, 0,
- 0, 1543, 1544, 1545, 1546, 1547, 1548, 1549,
- 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557,
- 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565,
- 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573,
- 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581,
- 1582, 1583, 1584, 1585, 0, 0, 1586, 1587,
- 1588, 1104, 1104, 1104, 1104, 1104, 1104, 1104,
- 1104, 0, 0, 0, 0, 0, 0, 0,
- 0, 898, 898, 898, 1104, 1589, 1147, 1147,
- 1147, 1147, 1147, 898, 898, 1147, 1147, 1147,
- 1147, 898, 1215, 1589, 1589, 1589, 1589, 1589,
- 1589, 1589, 349, 349, 349, 349, 1147, 349,
- 349, 349, 349, 349, 349, 898, 349, 349,
- 1215, 898, 898, 349, 0, 0, 0, 0,
- 0, 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, 1719, 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, 898, 898, 1147, 898, 898, 898, 898,
- 898, 898, 898, 1147, 898, 898, 1782, 1783,
- 1147, 1784, 898, 898, 898, 898, 898, 898,
- 898, 898, 898, 898, 898, 898, 898, 898,
- 898, 898, 898, 898, 898, 898, 898, 898,
- 898, 898, 898, 898, 898, 898, 898, 898,
- 898, 898, 898, 898, 898, 898, 898, 1785,
- 1149, 1149, 1147, 1786, 898, 1787, 1147, 898,
- 1147, 1788, 1789, 1790, 1791, 1792, 1793, 1794,
+ 349, 349, 1521, 1522, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1233, 1234, 1209,
+ 1209, 1209, 1209, 1523, 1524, 1525, 1526, 1527,
+ 1528, 1529, 1530, 1531, 1532, 1533, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 0, 1103,
+ 1103, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 1103, 1103, 1103, 1103, 1103,
+ 1103, 1103, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 897, 1146, 897, 897,
+ 897, 897, 897, 897, 897, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 1103, 1103,
+ 1103, 1209, 1209, 1214, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1214, 1209, 1209, 1209, 1209, 1214,
+ 1214, 1209, 1209, 1507, 1223, 1209, 1209, 1215,
+ 1215, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 349, 1215, 1215, 1215, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 1233,
+ 1214, 1209, 1209, 1214, 1214, 1214, 1209, 1214,
+ 1209, 1209, 1209, 1507, 1507, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1103, 1103, 1103,
+ 1103, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 1214, 1214, 1214,
+ 1214, 1214, 1214, 1214, 1214, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1214, 1214, 1209,
+ 1233, 0, 0, 0, 1103, 1103, 1103, 1103,
+ 1103, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 349, 349,
+ 349, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 598, 598, 598, 598, 598, 598, 1103,
+ 1103, 1534, 1535, 1536, 1537, 1538, 1538, 1539,
+ 1540, 1541, 1542, 1543, 0, 0, 0, 0,
+ 0, 1544, 1545, 1546, 1547, 1548, 1549, 1550,
+ 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558,
+ 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566,
+ 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574,
+ 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582,
+ 1583, 1584, 1585, 1586, 0, 0, 1587, 1588,
+ 1589, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+ 1103, 0, 0, 0, 0, 0, 0, 0,
+ 0, 897, 897, 897, 1103, 1590, 1146, 1146,
+ 1146, 1146, 1146, 897, 897, 1146, 1146, 1146,
+ 1146, 897, 1214, 1590, 1590, 1590, 1590, 1590,
+ 1590, 1590, 349, 349, 349, 349, 1146, 349,
+ 349, 349, 349, 349, 349, 897, 349, 349,
+ 1214, 897, 897, 349, 0, 0, 0, 0,
+ 0, 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, 1719, 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, 897, 897, 1146, 897, 897, 897, 897,
+ 897, 897, 897, 1146, 897, 897, 1510, 1783,
+ 1146, 1784, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 1785,
+ 1148, 1148, 1146, 1786, 897, 1787, 1146, 897,
+ 1146, 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,
@@ -3181,8 +3194,8 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
2264, 0, 0, 2265, 2266, 2267, 0, 2268,
2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276,
0, 2277, 2278, 2279, 2279, 2279, 2279, 2279,
- 2280, 2279, 2279, 2279, 1510, 2281, 2282, 2283,
- 2284, 2285, 2286, 1146, 2285, 2285, 2285, 76,
+ 2280, 2279, 2279, 2279, 1509, 2281, 2282, 2283,
+ 2284, 2285, 2286, 1145, 2285, 2285, 2285, 76,
2287, 2288, 2289, 2290, 2291, 2288, 2289, 2290,
2291, 76, 76, 76, 8, 2292, 2293, 2294,
76, 2295, 2296, 2297, 2298, 2299, 2300, 2301,
@@ -3192,9 +3205,9 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
2310, 2311, 2312, 8, 8, 8, 8, 8,
8, 8, 8, 74, 8, 47, 8, 8,
2313, 8, 8, 8, 8, 8, 8, 8,
- 2279, 1510, 1510, 1510, 1510, 1510, 0, 2314,
- 2315, 2316, 2317, 1510, 1510, 1510, 1510, 1510,
- 1510, 2318, 2319, 0, 0, 2320, 2321, 2322,
+ 2279, 1509, 1509, 1509, 1509, 1509, 0, 2314,
+ 2315, 2316, 2317, 1509, 1509, 1509, 1509, 1509,
+ 1509, 2318, 2319, 0, 0, 2320, 2321, 2322,
2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330,
2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338,
2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346,
@@ -3204,13 +3217,13 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
10, 2360, 10, 10, 10, 77, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 0, 0, 0, 0, 0, 0,
+ 10, 10, 10, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 898, 898, 1589, 1589, 898, 898, 898,
- 898, 1589, 1589, 1589, 898, 898, 899, 899,
- 899, 899, 898, 899, 899, 899, 1589, 1589,
- 898, 1147, 898, 1589, 1589, 1147, 1147, 1147,
- 1147, 898, 0, 0, 0, 0, 0, 0,
+ 0, 897, 897, 1590, 1590, 897, 897, 897,
+ 897, 1590, 1590, 1590, 897, 897, 898, 898,
+ 898, 898, 897, 898, 898, 898, 1590, 1590,
+ 897, 1146, 897, 1590, 1590, 1146, 1146, 1146,
+ 1146, 897, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 2361, 2362, 2363, 2364, 78, 2365, 2366,
2367, 78, 2368, 2369, 2370, 2371, 2372, 2373,
@@ -3222,14 +3235,14 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
2405, 2406, 2407, 78, 2408, 2409, 2410, 2411,
2412, 2413, 74, 74, 74, 74, 2414, 2415,
2416, 2417, 2418, 78, 74, 78, 78, 2419,
- 897, 2420, 2421, 2422, 2423, 2424, 2425, 2426,
+ 896, 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, 2465, 2466,
- 2467, 1507, 1507, 1507, 2468, 2469, 1507, 1507,
- 1507, 1507, 2470, 78, 78, 0, 0, 0,
+ 2467, 1506, 1506, 1506, 2468, 2469, 1506, 1506,
+ 1506, 1506, 2470, 78, 78, 0, 0, 0,
0, 2471, 122, 2472, 122, 2473, 84, 84,
84, 84, 84, 2474, 2475, 78, 78, 78,
78, 74, 78, 78, 74, 78, 78, 74,
@@ -3282,19 +3295,19 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
78, 78, 78, 2564, 2564, 78, 78, 78,
78, 2484, 2484, 78, 78, 78, 78, 78,
78, 80, 2565, 2566, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 78, 74, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 78, 74, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
- 78, 80, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 897, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 896, 78,
78, 78, 78, 78, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74,
@@ -3372,41 +3385,41 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
78, 78, 78, 78, 78, 78, 78, 78,
2477, 78, 78, 78, 78, 78, 78, 78,
78, 74, 74, 74, 2707, 2707, 2708, 2708,
- 74, 80, 80, 80, 80, 80, 84, 2477,
- 80, 80, 84, 80, 80, 80, 80, 84,
- 84, 80, 80, 80, 78, 2564, 2564, 80,
- 80, 80, 80, 80, 80, 84, 80, 84,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
- 2564, 80, 80, 80, 80, 80, 80, 80,
- 80, 84, 80, 84, 80, 80, 80, 80,
- 80, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
- 2564, 2564, 2564, 2564, 2564, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 84, 84, 80, 84, 84, 84, 80,
- 84, 84, 84, 84, 80, 84, 84, 80,
- 2709, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 2564, 80, 80, 80, 80, 80, 80, 78,
- 78, 78, 78, 2710, 2710, 2710, 2710, 2710,
- 2710, 80, 80, 80, 2564, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 84,
- 84, 80, 2564, 80, 80, 80, 80, 80,
- 80, 80, 80, 2564, 2564, 2711, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 2564, 2564,
- 84, 80, 80, 80, 80, 2564, 2564, 84,
- 84, 84, 84, 84, 84, 84, 84, 2564,
- 84, 84, 84, 84, 84, 2564, 84, 84,
- 84, 84, 84, 84, 84, 84, 84, 84,
- 84, 84, 84, 80, 84, 80, 80, 80,
- 80, 84, 84, 2564, 84, 84, 84, 84,
- 84, 84, 84, 2564, 2564, 84, 2564, 84,
- 84, 84, 84, 2564, 84, 84, 2564, 84,
- 84, 80, 80, 80, 80, 80, 2564, 78,
- 78, 80, 80, 2564, 2564, 80, 80, 80,
- 80, 80, 80, 80, 78, 80, 78, 80,
+ 74, 80, 80, 80, 80, 80, 2477, 2477,
+ 78, 78, 2477, 78, 78, 78, 78, 84,
+ 2477, 78, 80, 78, 78, 2564, 2564, 78,
+ 78, 80, 78, 78, 78, 2477, 80, 2477,
+ 78, 80, 78, 80, 80, 78, 78, 80,
+ 78, 78, 78, 80, 78, 78, 78, 80,
+ 80, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 80, 80, 80, 78, 78, 78, 78,
+ 78, 84, 78, 84, 78, 78, 78, 78,
+ 78, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 80, 84, 2477, 78, 84, 2477, 84, 80,
+ 2477, 84, 2477, 2477, 78, 2477, 2477, 78,
+ 122, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 80, 78, 78, 80,
+ 2564, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 2709, 2709, 2709, 2709, 2709,
+ 2709, 78, 78, 80, 2564, 80, 80, 80,
+ 80, 78, 80, 78, 80, 80, 78, 2477,
+ 2477, 80, 2564, 78, 78, 78, 78, 78,
+ 80, 78, 78, 2564, 2564, 896, 78, 78,
+ 78, 80, 80, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 2564, 2564,
+ 2477, 78, 78, 78, 78, 2564, 2564, 2477,
+ 2477, 84, 2477, 2477, 2477, 2477, 2477, 2564,
+ 84, 2477, 84, 2477, 84, 2564, 2477, 2477,
+ 2477, 2477, 2477, 2477, 2477, 2477, 2477, 2477,
+ 2477, 2477, 2477, 78, 2477, 78, 78, 78,
+ 78, 2477, 84, 2564, 2477, 2477, 2477, 2477,
+ 2477, 84, 84, 2564, 2564, 84, 2564, 2477,
+ 84, 84, 84, 2564, 2477, 2477, 2564, 2477,
+ 2477, 78, 78, 80, 78, 78, 2564, 78,
+ 78, 80, 80, 2564, 2564, 80, 80, 78,
+ 80, 78, 78, 80, 78, 80, 78, 80,
78, 78, 78, 78, 78, 78, 80, 78,
78, 78, 80, 78, 78, 78, 78, 78,
78, 2564, 78, 78, 78, 78, 78, 78,
@@ -3416,13 +3429,13 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
80, 78, 78, 78, 78, 2564, 78, 2564,
78, 78, 78, 78, 2564, 2564, 2564, 78,
2564, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 80, 80, 80, 80,
- 80, 11, 12, 11, 12, 11, 12, 11,
+ 78, 78, 78, 78, 80, 80, 78, 78,
+ 78, 11, 12, 11, 12, 11, 12, 11,
12, 11, 12, 11, 12, 11, 12, 2706,
2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706,
- 2706, 1268, 1268, 1268, 1268, 1268, 1268, 1268,
- 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268,
- 1268, 1268, 1268, 1268, 1268, 78, 2564, 2564,
+ 2706, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
+ 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
+ 1267, 1267, 1267, 1267, 1267, 78, 2564, 2564,
2564, 78, 78, 78, 78, 78, 78, 78,
78, 78, 80, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
@@ -3436,39 +3449,39 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
12, 11, 12, 11, 12, 11, 12, 11,
12, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74,
- 74, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 74, 74, 74, 74, 74, 74, 74,
+ 74, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 74,
@@ -3501,7 +3514,7 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
74, 74, 74, 74, 74, 2484, 2484, 2484,
2484, 2484, 2484, 74, 74, 11, 12, 74,
74, 74, 74, 74, 74, 74, 74, 74,
- 74, 74, 74, 2484, 2484, 2712, 2484, 2484,
+ 74, 74, 74, 2484, 2484, 2710, 2484, 2484,
2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
2484, 2484, 2484, 2484, 2484, 2484, 74, 2484,
2484, 2484, 2484, 74, 74, 2484, 74, 2484,
@@ -3514,7 +3527,7 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
2484, 2484, 74, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 2484, 2484, 74,
74, 74, 74, 2484, 2484, 2484, 2484, 74,
- 2484, 2484, 74, 74, 2484, 2713, 2714, 2715,
+ 2484, 2484, 74, 74, 2484, 2711, 2712, 2713,
74, 74, 2484, 2484, 2484, 2484, 2484, 2484,
2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
@@ -3527,7 +3540,7 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
- 74, 74, 74, 74, 74, 2716, 74, 2484,
+ 74, 74, 74, 74, 74, 2714, 74, 2484,
74, 74, 74, 2484, 2484, 2484, 2484, 2484,
74, 74, 74, 74, 74, 2484, 2484, 2484,
74, 74, 74, 74, 2484, 74, 74, 74,
@@ -3550,7 +3563,6 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 0,
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
@@ -3563,45 +3575,46 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 2717,
- 78, 2718, 2719, 2720, 2721, 2722, 2723, 2724,
- 2725, 2726, 2727, 2728, 2729, 2730, 2731, 2732,
- 2733, 2734, 2735, 2736, 2737, 2738, 2739, 2740,
- 2741, 2742, 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, 78, 78,
- 78, 78, 78, 78, 2947, 2948, 2949, 2950,
- 898, 898, 898, 2951, 2952, 0, 0, 0,
- 0, 0, 8, 8, 8, 8, 1268, 8,
- 8, 2953, 2954, 2955, 2956, 2957, 2958, 2959,
- 2960, 2961, 2962, 2963, 2964, 2965, 2966, 2967,
- 2968, 2969, 2970, 2971, 2972, 2973, 2974, 2975,
- 2976, 2977, 2978, 2979, 2980, 2981, 2982, 2983,
- 2984, 2985, 2986, 2987, 2988, 2989, 2990, 0,
- 2991, 0, 0, 0, 0, 0, 2992, 0,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 2715,
+ 78, 2716, 2717, 2718, 2719, 2720, 2721, 2722,
+ 2723, 2724, 2725, 2726, 2727, 2728, 2729, 2730,
+ 2731, 2732, 2733, 2734, 2735, 2736, 2737, 2738,
+ 2739, 2740, 2741, 2742, 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, 78, 78,
+ 78, 78, 78, 78, 2945, 2946, 2947, 2948,
+ 897, 897, 897, 2949, 2950, 0, 0, 0,
+ 0, 0, 8, 8, 8, 8, 1267, 8,
+ 8, 2951, 2952, 2953, 2954, 2955, 2956, 2957,
+ 2958, 2959, 2960, 2961, 2962, 2963, 2964, 2965,
+ 2966, 2967, 2968, 2969, 2970, 2971, 2972, 2973,
+ 2974, 2975, 2976, 2977, 2978, 2979, 2980, 2981,
+ 2982, 2983, 2984, 2985, 2986, 2987, 2988, 0,
+ 2989, 0, 0, 0, 0, 0, 2990, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
@@ -3610,9 +3623,9 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 0, 0, 0, 0, 0, 0, 0,
- 2993, 1104, 0, 0, 0, 0, 0, 0,
+ 2991, 1103, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 1245, 349, 349, 349, 349, 349, 349, 349,
+ 1244, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -3624,351 +3637,351 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 349, 349, 349, 349, 349, 349, 349,
0, 349, 349, 349, 349, 349, 349, 349,
0, 349, 349, 349, 349, 349, 349, 349,
- 0, 898, 898, 898, 898, 898, 898, 898,
- 898, 898, 898, 898, 898, 898, 898, 898,
- 898, 898, 898, 898, 898, 898, 898, 898,
- 898, 898, 898, 898, 898, 898, 898, 898,
- 898, 8, 8, 82, 95, 82, 95, 8,
+ 0, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 8, 8, 82, 95, 82, 95, 8,
8, 8, 82, 95, 8, 82, 95, 8,
8, 8, 8, 8, 8, 8, 8, 8,
- 1146, 8, 8, 1146, 8, 82, 95, 8,
+ 1145, 8, 8, 1145, 8, 82, 95, 8,
8, 82, 95, 11, 12, 11, 12, 11,
12, 11, 12, 8, 8, 8, 8, 8,
- 598, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 1146, 1146, 8, 8, 8,
- 8, 1146, 8, 2290, 8, 8, 8, 8,
+ 597, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 1145, 1145, 8, 8, 8,
+ 8, 1145, 8, 2290, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8,
8, 78, 78, 8, 8, 8, 11, 12,
- 11, 12, 11, 12, 11, 12, 1146, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 0, 2710, 2710, 2710, 2710,
- 2994, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2995, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2996, 2997, 2998, 2999, 3000, 3001, 3002,
- 3003, 3004, 3005, 3006, 3007, 3008, 3009, 3010,
- 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018,
- 3019, 3020, 3021, 3022, 3023, 3024, 3025, 3026,
- 3027, 3028, 3029, 3030, 3031, 3032, 3033, 3034,
- 3035, 3036, 3037, 3038, 3039, 3040, 3041, 3042,
- 3043, 3044, 3045, 3046, 3047, 3048, 3049, 3050,
- 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058,
- 3059, 3060, 3061, 3062, 3063, 3064, 3065, 3066,
- 3067, 3068, 3069, 3070, 3071, 3072, 3073, 3074,
- 3075, 3076, 3077, 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, 3172, 3173, 3174, 3175, 3176, 3177, 3178,
- 3179, 3180, 3181, 3182, 3183, 3184, 3185, 3186,
- 3187, 3188, 3189, 3190, 3191, 3192, 3193, 3194,
- 3195, 3196, 3197, 3198, 3199, 3200, 3201, 3202,
- 3203, 3204, 3205, 3206, 3207, 3208, 3209, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 3210, 3211, 3211, 3211, 2710, 3212, 3213,
- 3214, 3215, 3216, 3215, 3216, 3215, 3216, 3215,
- 3216, 3215, 3216, 2710, 2710, 3215, 3216, 3215,
- 3216, 3215, 3216, 3215, 3216, 3217, 3218, 3219,
- 3219, 2710, 3214, 3214, 3214, 3214, 3214, 3214,
- 3214, 3214, 3214, 1786, 1149, 1785, 1148, 3220,
- 3220, 3221, 3212, 3212, 3212, 3212, 3212, 3222,
- 2710, 3223, 3224, 3225, 3212, 3213, 3226, 2710,
- 78, 0, 3213, 3213, 3213, 3213, 3213, 3227,
- 3213, 3213, 3213, 3213, 3228, 3229, 3230, 3231,
- 3232, 3233, 3234, 3235, 3236, 3237, 3238, 3239,
- 3240, 3241, 3242, 3243, 3244, 3245, 3246, 3247,
- 3248, 3249, 3250, 3251, 3213, 3252, 3253, 3254,
- 3255, 3256, 3257, 3213, 3213, 3213, 3213, 3213,
- 3258, 3259, 3260, 3261, 3262, 3263, 3264, 3265,
- 3266, 3267, 3268, 3269, 3270, 3271, 3272, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3273, 3213, 3213,
- 0, 0, 3274, 3274, 3275, 3276, 3277, 3278,
- 3279, 3217, 3213, 3213, 3213, 3213, 3213, 3280,
- 3213, 3213, 3213, 3213, 3281, 3282, 3283, 3284,
- 3285, 3286, 3287, 3288, 3289, 3290, 3291, 3292,
- 3293, 3294, 3295, 3296, 3297, 3298, 3299, 3300,
- 3301, 3302, 3303, 3304, 3213, 3305, 3306, 3307,
- 3308, 3309, 3310, 3213, 3213, 3213, 3213, 3213,
- 3311, 3312, 3313, 3314, 3315, 3316, 3317, 3318,
- 3319, 3320, 3321, 3322, 3323, 3324, 3325, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3326, 3327, 3328, 3329, 3213, 3330, 3213, 3213,
- 3331, 3332, 3333, 3334, 3211, 3212, 3335, 3336,
- 3337, 0, 0, 0, 0, 0, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 0, 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, 3431,
- 0, 3432, 3432, 3433, 3434, 3435, 3436, 3437,
- 3438, 3439, 3440, 3441, 3442, 3443, 3444, 3445,
- 3446, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 2710, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 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,
- 0, 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, 3518, 3518, 3518, 3518, 3518, 3518,
- 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,
- 3432, 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, 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,
- 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, 3763, 3764,
- 3765, 3766, 3767, 3768, 3769, 3770, 3771, 3772,
- 3773, 3774, 3775, 3776, 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, 3840, 3841, 3842, 3843, 3844,
- 3845, 3846, 3847, 3848, 3849, 3850, 3851, 3852,
- 3853, 3854, 3855, 3856, 3857, 3858, 3859, 3860,
- 3861, 3862, 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, 3888, 3889, 3890, 3891, 3892,
- 3893, 3894, 3895, 3896, 3897, 3898, 3899, 3900,
- 3901, 3902, 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, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3212, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 0, 0,
- 0, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
+ 11, 12, 11, 12, 11, 12, 1145, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 0, 2709, 2709, 2709, 2709,
+ 2992, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2993, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2994, 2995, 2996, 2997, 2998, 2999, 3000,
+ 3001, 3002, 3003, 3004, 3005, 3006, 3007, 3008,
+ 3009, 3010, 3011, 3012, 3013, 3014, 3015, 3016,
+ 3017, 3018, 3019, 3020, 3021, 3022, 3023, 3024,
+ 3025, 3026, 3027, 3028, 3029, 3030, 3031, 3032,
+ 3033, 3034, 3035, 3036, 3037, 3038, 3039, 3040,
+ 3041, 3042, 3043, 3044, 3045, 3046, 3047, 3048,
+ 3049, 3050, 3051, 3052, 3053, 3054, 3055, 3056,
+ 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064,
+ 3065, 3066, 3067, 3068, 3069, 3070, 3071, 3072,
+ 3073, 3074, 3075, 3076, 3077, 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, 3172, 3173, 3174, 3175, 3176,
+ 3177, 3178, 3179, 3180, 3181, 3182, 3183, 3184,
+ 3185, 3186, 3187, 3188, 3189, 3190, 3191, 3192,
+ 3193, 3194, 3195, 3196, 3197, 3198, 3199, 3200,
+ 3201, 3202, 3203, 3204, 3205, 3206, 3207, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 3208, 3209, 3209, 3209, 2709, 3210, 3211,
+ 3212, 3213, 3214, 3213, 3214, 3213, 3214, 3213,
+ 3214, 3213, 3214, 2709, 2709, 3213, 3214, 3213,
+ 3214, 3213, 3214, 3213, 3214, 3215, 3216, 3217,
+ 3217, 2709, 3212, 3212, 3212, 3212, 3212, 3212,
+ 3212, 3212, 3212, 1786, 1148, 1785, 1147, 3218,
+ 3218, 3219, 3210, 3210, 3210, 3210, 3210, 3220,
+ 2709, 3221, 3222, 3223, 3210, 3211, 3224, 2709,
+ 78, 0, 3211, 3211, 3211, 3211, 3211, 3225,
+ 3211, 3211, 3211, 3211, 3226, 3227, 3228, 3229,
+ 3230, 3231, 3232, 3233, 3234, 3235, 3236, 3237,
+ 3238, 3239, 3240, 3241, 3242, 3243, 3244, 3245,
+ 3246, 3247, 3248, 3249, 3211, 3250, 3251, 3252,
+ 3253, 3254, 3255, 3211, 3211, 3211, 3211, 3211,
+ 3256, 3257, 3258, 3259, 3260, 3261, 3262, 3263,
+ 3264, 3265, 3266, 3267, 3268, 3269, 3270, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3271, 3211, 3211,
+ 0, 0, 3272, 3272, 3273, 3274, 3275, 3276,
+ 3277, 3215, 3211, 3211, 3211, 3211, 3211, 3278,
+ 3211, 3211, 3211, 3211, 3279, 3280, 3281, 3282,
+ 3283, 3284, 3285, 3286, 3287, 3288, 3289, 3290,
+ 3291, 3292, 3293, 3294, 3295, 3296, 3297, 3298,
+ 3299, 3300, 3301, 3302, 3211, 3303, 3304, 3305,
+ 3306, 3307, 3308, 3211, 3211, 3211, 3211, 3211,
+ 3309, 3310, 3311, 3312, 3313, 3314, 3315, 3316,
+ 3317, 3318, 3319, 3320, 3321, 3322, 3323, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3324, 3325, 3326, 3327, 3211, 3328, 3211, 3211,
+ 3329, 3330, 3331, 3332, 3209, 3210, 3333, 3334,
+ 3335, 0, 0, 0, 0, 0, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 0, 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,
+ 0, 3430, 3430, 3431, 3432, 3433, 3434, 3435,
+ 3436, 3437, 3438, 3439, 3440, 3441, 3442, 3443,
+ 3444, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 2709, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 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,
+ 0, 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, 3516, 3516, 3516, 3516, 3516, 3516,
+ 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,
+ 3430, 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, 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, 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,
+ 3763, 3764, 3765, 3766, 3767, 3768, 3769, 3770,
+ 3771, 3772, 3773, 3774, 3775, 3776, 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, 3840, 3841, 3842,
+ 3843, 3844, 3845, 3846, 3847, 3848, 3849, 3850,
+ 3851, 3852, 3853, 3854, 3855, 3856, 3857, 3858,
+ 3859, 3860, 3861, 3862, 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, 3888, 3889, 3890,
+ 3891, 3892, 3893, 3894, 3895, 3896, 3897, 3898,
+ 3899, 3900, 3901, 3902, 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, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3210, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 0, 0,
+ 0, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
0, 0, 0, 0, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 599, 599, 599, 599, 599, 599, 1104,
- 1104, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 599, 8, 8,
+ 349, 598, 598, 598, 598, 598, 598, 1103,
+ 1103, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 598, 8, 8,
8, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 349, 349, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 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, 3983, 3984, 3985, 3986, 3987, 3988,
- 3989, 3990, 3991, 3992, 3993, 3994, 3995, 349,
- 898, 899, 899, 899, 8, 898, 898, 898,
- 898, 898, 898, 898, 898, 898, 898, 8,
- 598, 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, 898,
- 898, 349, 349, 349, 349, 349, 349, 349,
+ 349, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 349, 349, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 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, 3983, 3984, 3985, 3986,
+ 3987, 3988, 3989, 3990, 3991, 3992, 3993, 349,
+ 897, 898, 898, 898, 8, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 8,
+ 597, 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, 897,
+ 897, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
@@ -3976,50 +3989,50 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 898, 898, 1104, 1104, 1104, 1104, 1104,
- 1104, 0, 0, 0, 0, 0, 0, 0,
+ 349, 349, 349, 349, 349, 349, 349, 1506,
+ 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506,
+ 1506, 897, 897, 1103, 1103, 1103, 1103, 1103,
+ 1103, 0, 0, 0, 0, 0, 0, 0,
0, 46, 46, 46, 46, 46, 46, 46,
46, 46, 46, 46, 46, 46, 46, 46,
46, 46, 46, 46, 46, 46, 46, 46,
- 598, 598, 598, 598, 598, 598, 598, 598,
- 598, 46, 46, 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, 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, 598, 4128, 4128, 4129, 4130, 4131, 4132,
- 349, 4133, 4134, 4135, 4136, 4137, 4138, 4139,
- 4140, 4141, 4142, 4143, 4144, 4145, 4146, 4147,
- 4148, 4149, 4150, 4151, 4152, 4153, 4154, 4155,
- 4156, 4157, 4158, 4159, 4160, 4161, 4162, 4163,
- 4164, 4165, 4166, 4167, 4168, 4169, 4170, 4171,
- 4172, 4173, 4174, 4175, 4176, 4177, 4178, 4179,
- 4180, 4181, 4182, 4183, 4184, 4185, 4186, 4187,
- 4188, 4189, 4190, 4191, 4192, 4193, 4194, 0,
- 0, 4195, 4196, 0, 4197, 0, 4198, 4199,
- 4200, 4201, 4202, 4203, 4204, 4205, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 4206, 4207, 4208, 4209, 4210,
- 349, 4211, 4212, 4213, 349, 349, 349, 349,
- 349, 349, 349, 1210, 349, 349, 349, 1245,
- 349, 349, 349, 349, 1210, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 1215, 1215, 1210, 1210,
- 1215, 78, 78, 78, 78, 1245, 0, 0,
- 0, 1242, 1242, 1242, 1242, 1242, 1242, 897,
- 897, 10, 2396, 0, 0, 0, 0, 0,
+ 597, 597, 597, 597, 597, 597, 597, 597,
+ 597, 46, 46, 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, 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, 597, 4126, 4126, 4127, 4128, 4129, 4130,
+ 349, 4131, 4132, 4133, 4134, 4135, 4136, 4137,
+ 4138, 4139, 4140, 4141, 4142, 4143, 4144, 4145,
+ 4146, 4147, 4148, 4149, 4150, 4151, 4152, 4153,
+ 4154, 4155, 4156, 4157, 4158, 4159, 4160, 4161,
+ 4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169,
+ 4170, 4171, 4172, 4173, 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, 4201,
+ 4202, 4203, 4204, 4205, 4206, 4207, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4208, 4209, 4210, 4211, 4212, 4213,
+ 349, 4214, 4215, 4216, 349, 349, 349, 349,
+ 349, 349, 349, 1209, 349, 349, 349, 1244,
+ 349, 349, 349, 349, 1209, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 1214, 1214, 1209, 1209,
+ 1214, 78, 78, 78, 78, 1244, 0, 0,
+ 0, 1241, 1241, 1241, 1241, 1241, 1241, 896,
+ 896, 10, 2396, 0, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
@@ -4028,85 +4041,85 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 8, 8, 8,
8, 0, 0, 0, 0, 0, 0, 0,
- 0, 1215, 1215, 349, 349, 349, 349, 349,
+ 0, 1214, 1214, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 1215, 1215, 1215,
- 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
- 1215, 1215, 1215, 1215, 1215, 1245, 1210, 0,
- 0, 0, 0, 0, 0, 0, 0, 1104,
- 1104, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 0,
- 0, 898, 898, 898, 898, 898, 898, 898,
- 898, 898, 898, 898, 898, 898, 898, 898,
- 898, 898, 898, 349, 349, 349, 349, 349,
- 349, 1104, 1104, 1104, 349, 1104, 349, 349,
- 1210, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 1214, 1214, 1214,
+ 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214,
+ 1214, 1214, 1214, 1214, 1214, 1244, 1209, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1103,
+ 1103, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 0,
+ 0, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 349, 349, 349, 349, 349,
+ 349, 1103, 1103, 1103, 349, 1103, 349, 349,
+ 1209, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 1210,
- 1210, 1210, 1210, 1210, 1147, 1147, 1147, 1104,
- 1104, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 1209,
+ 1209, 1209, 1209, 1209, 1146, 1146, 1146, 1103,
+ 1103, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1215, 1508, 0, 0, 0,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1214, 1507, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 1104, 1410, 1410, 1410, 1410, 1410, 1410, 1410,
- 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410,
- 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410,
- 1410, 1410, 1410, 1410, 1410, 1410, 0, 0,
- 0, 1210, 1210, 1210, 1215, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 1234, 1215, 1215, 1210,
- 1210, 1210, 1210, 1215, 1215, 1210, 1210, 1215,
- 1215, 1508, 1104, 1104, 1104, 1104, 1104, 1104,
- 1104, 1104, 1104, 1104, 1104, 1104, 1104, 0,
- 599, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 1104,
- 1104, 349, 349, 349, 349, 349, 1210, 599,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 349, 349, 349, 349, 349,
+ 1103, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+ 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+ 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+ 1409, 1409, 1409, 1409, 1409, 1409, 0, 0,
+ 0, 1209, 1209, 1209, 1214, 349, 349, 349,
+ 349, 349, 1215, 1215, 1215, 349, 349, 349,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1233, 1214, 1214, 1209,
+ 1209, 1209, 1209, 1214, 1214, 1209, 1209, 1214,
+ 1214, 1533, 1103, 1103, 1103, 1103, 1103, 1103,
+ 1103, 1103, 1103, 1103, 1103, 1103, 1103, 0,
+ 598, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 1103,
+ 1103, 1215, 1215, 1215, 1215, 1215, 1209, 598,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 1215, 1215, 1215, 1215, 1215,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 1210, 1210, 1210, 1210, 1210, 1210,
- 1215, 1215, 1210, 1210, 1215, 1215, 1210, 1210,
+ 349, 349, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1214, 1214, 1209, 1209, 1214, 1214, 1209, 1209,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 349, 349, 349, 1210, 349, 349, 349,
- 349, 349, 349, 349, 349, 1210, 1215, 0,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 1104, 1104, 1104,
- 1104, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 599, 349, 349, 349, 349, 349, 349,
- 897, 897, 897, 349, 1322, 1210, 1322, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
+ 0, 349, 349, 349, 1209, 349, 349, 349,
+ 349, 349, 349, 349, 349, 1209, 1214, 0,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 1103, 1103, 1103,
+ 1103, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 598, 1215, 1215, 1215, 349, 349, 349,
+ 896, 896, 896, 1215, 1321, 1209, 1321, 1215,
+ 1215, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 898, 349, 898, 898, 1147, 349, 349,
- 898, 898, 349, 349, 349, 349, 349, 898,
- 898, 349, 898, 349, 0, 0, 0, 0,
+ 349, 897, 349, 897, 897, 1146, 349, 349,
+ 897, 897, 349, 349, 349, 349, 349, 897,
+ 897, 349, 897, 349, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 349, 349, 599, 1104,
- 1104, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 1215, 1210, 1210, 1215,
- 1215, 1104, 1104, 349, 599, 599, 1215, 1245,
+ 0, 0, 0, 0, 349, 349, 598, 1103,
+ 1103, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1214, 1209, 1209, 1214,
+ 1214, 1103, 1103, 349, 598, 598, 1214, 1223,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 349, 349, 349, 349, 349, 349,
0, 0, 349, 349, 349, 349, 349, 349,
@@ -4114,576 +4127,576 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
0, 349, 349, 349, 349, 349, 349, 349,
- 0, 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, 4251, 4252,
- 4253, 4254, 4255, 4256, 4128, 4257, 4258, 4259,
- 4260, 4261, 4262, 4263, 4264, 4265, 4266, 4267,
- 4268, 4269, 4270, 46, 46, 0, 0, 0,
- 0, 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, 4312, 4313, 4314, 4315, 4316, 4317,
- 4318, 4319, 4320, 4321, 4322, 4323, 4324, 4325,
- 4326, 4327, 4328, 4329, 4330, 4331, 4332, 4333,
- 4334, 4335, 4336, 4337, 4338, 4339, 4340, 4341,
- 4342, 4343, 4344, 4345, 4346, 4347, 4348, 4349,
- 4350, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 1215, 1215, 1210, 1215,
- 1215, 1210, 1215, 1215, 1104, 1215, 1245, 0,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 0,
- 0, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4351, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4351, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352,
- 4352, 4352, 4352, 4352, 4352, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1413, 1413, 1413, 1413, 1413, 1413, 1413,
+ 0, 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, 4251, 4252, 4253, 4254, 4255,
+ 4256, 4257, 4258, 4259, 4126, 4260, 4261, 4262,
+ 4263, 4264, 4265, 4266, 4267, 4268, 4269, 4270,
+ 4271, 4272, 4273, 46, 46, 0, 0, 0,
+ 0, 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, 4312,
+ 4313, 4314, 4315, 4316, 4317, 4318, 4319, 4320,
+ 4321, 4322, 4323, 4324, 4325, 4326, 4327, 4328,
+ 4329, 4330, 4331, 4332, 4333, 4334, 4335, 4336,
+ 4337, 4338, 4339, 4340, 4341, 4342, 4343, 4344,
+ 4345, 4346, 4347, 4348, 4349, 4350, 4351, 4352,
+ 4353, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 349, 349, 349, 349,
+ 349, 349, 349, 349, 1214, 1214, 1209, 1214,
+ 1214, 1209, 1214, 1214, 1103, 1214, 1244, 0,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 0,
+ 0, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
+ 4355, 4355, 4355, 4355, 4355, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+ 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+ 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+ 0, 0, 0, 0, 1413, 1413, 1413, 1413,
1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413,
1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413,
- 0, 0, 0, 0, 1414, 1414, 1414, 1414,
- 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
- 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
- 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
- 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
- 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
- 1414, 1414, 1414, 1414, 1414, 0, 0, 0,
- 0, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
- 4353, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4355, 4356, 4357, 4358, 4359, 4360, 4361,
- 4362, 4362, 4363, 4364, 4365, 4366, 4367, 4368,
- 4369, 4370, 4371, 4372, 4373, 4374, 4375, 4376,
- 4377, 4378, 4379, 4380, 4381, 4382, 4383, 4384,
- 4385, 4386, 4387, 4388, 4389, 4390, 4391, 4392,
- 4393, 4394, 4395, 4396, 4397, 4398, 4399, 4400,
- 4401, 4402, 4403, 4404, 4405, 4406, 4407, 4408,
- 4409, 4410, 4411, 4412, 4413, 4414, 4415, 4416,
- 4417, 4418, 4419, 4420, 4421, 4422, 4423, 4424,
- 4425, 4426, 4427, 4428, 4429, 4430, 4431, 4432,
- 4433, 4434, 4435, 4436, 4437, 4438, 4439, 4440,
- 4441, 4442, 4443, 4444, 4445, 4374, 4446, 4447,
- 4448, 4449, 4450, 4451, 4452, 4453, 4454, 4455,
- 4456, 4457, 4458, 4459, 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, 4464, 4514, 4515, 4516, 4517, 4518,
- 4519, 4520, 4521, 4448, 4522, 4523, 4524, 4525,
- 4526, 4527, 4528, 4529, 4530, 4531, 4532, 4533,
- 4534, 4535, 4536, 4537, 4538, 4539, 4540, 4541,
- 4374, 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, 4450, 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, 4617, 4618, 3213,
- 3213, 4619, 3213, 4620, 3213, 3213, 4621, 4622,
- 4623, 4624, 4625, 4626, 4627, 4628, 4629, 4630,
- 3213, 4631, 3213, 4632, 3213, 3213, 4633, 4634,
- 3213, 3213, 3213, 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,
- 4503, 4680, 4681, 4682, 4683, 4684, 4685, 4685,
- 4686, 4687, 4688, 4689, 4690, 4691, 4692, 4693,
- 4633, 4694, 4695, 4696, 4697, 4698, 4699, 0,
- 0, 4700, 4701, 4702, 4703, 4704, 4705, 4706,
- 4707, 4647, 4708, 4709, 4710, 4619, 4711, 4712,
- 4713, 4714, 4715, 4716, 4717, 4718, 4719, 4720,
- 4721, 4722, 4656, 4723, 4657, 4724, 4725, 4726,
- 4727, 4728, 4620, 4395, 4729, 4730, 4731, 4465,
- 4552, 4732, 4733, 4664, 4734, 4665, 4735, 4736,
- 4737, 4622, 4738, 4739, 4740, 4741, 4742, 4623,
- 4743, 4744, 4745, 4746, 4747, 4748, 4679, 4749,
- 4750, 4503, 4751, 4683, 4752, 4753, 4754, 4755,
- 4756, 4688, 4757, 4632, 4758, 4689, 4446, 4759,
- 4690, 4760, 4692, 4761, 4762, 4763, 4764, 4765,
- 4694, 4628, 4766, 4695, 4767, 4696, 4768, 4362,
- 4769, 4770, 4771, 4772, 4773, 4774, 4775, 4776,
- 4777, 4778, 4779, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 4780, 4781, 4782, 4783, 4784, 4785, 4786,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 4787, 4788, 4789, 4790,
- 4791, 0, 0, 0, 0, 0, 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,
- 0, 4818, 4819, 4820, 4821, 4822, 0, 4823,
- 0, 4824, 4825, 0, 4826, 4827, 0, 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, 4930, 4931, 4932,
- 4933, 4934, 4935, 1214, 1214, 1214, 1214, 1214,
- 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214,
- 1214, 1214, 1214, 1214, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 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, 4974, 4984, 4985, 4986,
- 4987, 4988, 4989, 4990, 4991, 4992, 4993, 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, 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, 4975, 5084, 5085, 5086, 5087, 5088, 5089,
- 5090, 5091, 5092, 5093, 5094, 5095, 5096, 5097,
- 5098, 5099, 5100, 5101, 5102, 5103, 5104, 5105,
- 5106, 5107, 5108, 5109, 5110, 5111, 5112, 5113,
- 5114, 5115, 5116, 5117, 5118, 5119, 5120, 5121,
- 5122, 5123, 5124, 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, 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,
+ 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413,
+ 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413,
+ 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413,
+ 1413, 1413, 1413, 1413, 1413, 0, 0, 0,
+ 0, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+ 4356, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4358, 4359, 4360, 4361, 4362, 4363, 4364,
+ 4365, 4365, 4366, 4367, 4368, 4369, 4370, 4371,
+ 4372, 4373, 4374, 4375, 4376, 4377, 4378, 4379,
+ 4380, 4381, 4382, 4383, 4384, 4385, 4386, 4387,
+ 4388, 4389, 4390, 4391, 4392, 4393, 4394, 4395,
+ 4396, 4397, 4398, 4399, 4400, 4401, 4402, 4403,
+ 4404, 4405, 4406, 4407, 4408, 4409, 4410, 4411,
+ 4412, 4413, 4414, 4415, 4416, 4417, 4418, 4419,
+ 4420, 4421, 4422, 4423, 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, 4377, 4449, 4450,
+ 4451, 4452, 4453, 4454, 4455, 4456, 4457, 4458,
+ 4459, 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, 4467, 4517, 4518, 4519, 4520, 4521,
+ 4522, 4523, 4524, 4451, 4525, 4526, 4527, 4528,
+ 4529, 4530, 4531, 4532, 4533, 4534, 4535, 4536,
+ 4537, 4538, 4539, 4540, 4541, 4542, 4543, 4544,
+ 4377, 4545, 4546, 4547, 4548, 4549, 4550, 4551,
+ 4552, 4553, 4554, 4555, 4556, 4557, 4558, 4559,
+ 4560, 4561, 4562, 4563, 4564, 4565, 4566, 4567,
+ 4568, 4569, 4570, 4571, 4453, 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, 4617, 4618, 4619, 4620, 4621, 3211,
+ 3211, 4622, 3211, 4623, 3211, 3211, 4624, 4625,
+ 4626, 4627, 4628, 4629, 4630, 4631, 4632, 4633,
+ 3211, 4634, 3211, 4635, 3211, 3211, 4636, 4637,
+ 3211, 3211, 3211, 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,
+ 4506, 4683, 4684, 4685, 4686, 4687, 4688, 4688,
+ 4689, 4690, 4691, 4692, 4693, 4694, 4695, 4696,
+ 4636, 4697, 4698, 4699, 4700, 4701, 4702, 0,
+ 0, 4703, 4704, 4705, 4706, 4707, 4708, 4709,
+ 4710, 4650, 4711, 4712, 4713, 4622, 4714, 4715,
+ 4716, 4717, 4718, 4719, 4720, 4721, 4722, 4723,
+ 4724, 4725, 4659, 4726, 4660, 4727, 4728, 4729,
+ 4730, 4731, 4623, 4398, 4732, 4733, 4734, 4468,
+ 4555, 4735, 4736, 4667, 4737, 4668, 4738, 4739,
+ 4740, 4625, 4741, 4742, 4743, 4744, 4745, 4626,
+ 4746, 4747, 4748, 4749, 4750, 4751, 4682, 4752,
+ 4753, 4506, 4754, 4686, 4755, 4756, 4757, 4758,
+ 4759, 4691, 4760, 4635, 4761, 4692, 4449, 4762,
+ 4693, 4763, 4695, 4764, 4765, 4766, 4767, 4768,
+ 4697, 4631, 4769, 4698, 4770, 4699, 4771, 4365,
+ 4772, 4773, 4774, 4775, 4776, 4777, 4778, 4779,
+ 4780, 4781, 4782, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4783, 4784, 4785, 4786, 4787, 4788, 4789,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4790, 4791, 4792, 4793,
+ 4794, 0, 0, 0, 0, 0, 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,
+ 0, 4821, 4822, 4823, 4824, 4825, 0, 4826,
+ 0, 4827, 4828, 0, 4829, 4830, 0, 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, 4930, 4931, 4932, 4933, 4934, 4935,
+ 4936, 4937, 4938, 1213, 1213, 1213, 1213, 1213,
+ 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
+ 1213, 1213, 1213, 1213, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 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, 4977, 4987, 4988, 4989,
+ 4990, 4991, 4992, 4993, 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, 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, 4978, 5087, 5088, 5089, 5090, 5091, 5092,
+ 5093, 5094, 5095, 5096, 5097, 5098, 5099, 5100,
+ 5101, 5102, 5103, 5104, 5105, 5106, 5107, 5108,
+ 5109, 5110, 5111, 5112, 5113, 5114, 5115, 5116,
+ 5117, 5118, 5119, 5120, 5121, 5122, 5123, 5124,
+ 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, 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,
2290, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
- 78, 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, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0,
+ 78, 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, 78, 78, 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, 78, 78, 78, 78, 78, 78, 78,
78, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 5416, 5417, 5418, 5419, 5420, 5421, 5422,
- 5423, 5424, 5425, 5426, 5427, 5428, 78, 78,
- 78, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 5429, 5430, 5431, 5432, 5433, 5434, 5435,
- 5436, 5437, 5438, 0, 0, 0, 0, 0,
- 0, 898, 898, 898, 898, 898, 898, 898,
- 1147, 1147, 1147, 1147, 1147, 1147, 1147, 898,
- 898, 5439, 5440, 5441, 5442, 5442, 5443, 5444,
- 5445, 5446, 5447, 5448, 5449, 5450, 5451, 5452,
- 5453, 5454, 5455, 5456, 5457, 5458, 3211, 3211,
- 5459, 5460, 5461, 5461, 5461, 5461, 5462, 5462,
- 5462, 5463, 5464, 5465, 0, 5466, 5467, 5468,
- 5469, 5470, 5471, 5472, 5473, 5474, 5475, 5476,
- 5477, 5478, 5479, 5480, 5481, 5482, 5483, 5484,
- 0, 5485, 5486, 5487, 5488, 0, 0, 0,
- 0, 5489, 5490, 5491, 1177, 5492, 0, 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, 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, 5605,
- 5606, 5607, 5608, 5609, 5610, 5611, 5612, 5613,
- 5614, 5615, 5616, 5617, 5618, 5619, 5620, 5621,
- 5622, 5623, 5624, 5625, 5626, 5627, 0, 0,
- 1510, 0, 5628, 5629, 5630, 5631, 5632, 5633,
- 5634, 5635, 5636, 5637, 5638, 5639, 5640, 5641,
- 5642, 5643, 5644, 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, 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, 5747, 5748, 5749, 5750, 5751, 5752, 5753,
- 5754, 5755, 5756, 5757, 5758, 5759, 5760, 5761,
- 5762, 5763, 5764, 5765, 5766, 5767, 5768, 5769,
- 5770, 5771, 5772, 5773, 5774, 5775, 5776, 5777,
- 5778, 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,
- 0, 0, 0, 5818, 5819, 5820, 5821, 5822,
- 5823, 0, 0, 5824, 5825, 5826, 5827, 5828,
- 5829, 0, 0, 5830, 5831, 5832, 5833, 5834,
- 5835, 0, 0, 5836, 5837, 5838, 0, 0,
- 0, 5839, 5840, 5841, 5842, 5843, 5844, 5845,
- 0, 5846, 5847, 5848, 5849, 5850, 5851, 5852,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 5853, 5853, 5853, 78, 2477, 0,
+ 0, 5419, 5420, 5421, 5422, 5423, 5424, 5425,
+ 5426, 5427, 5428, 5429, 5430, 5431, 78, 78,
+ 78, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 5432, 5433, 5434, 5435, 5436, 5437, 5438,
+ 5439, 5440, 5441, 0, 0, 0, 0, 0,
+ 0, 897, 897, 897, 897, 897, 897, 897,
+ 1146, 1146, 1146, 1146, 1146, 1146, 1146, 897,
+ 897, 5442, 5443, 5444, 5445, 5445, 5446, 5447,
+ 5448, 5449, 5450, 5451, 5452, 5453, 5454, 5455,
+ 5456, 5457, 5458, 5459, 5460, 5461, 3209, 3209,
+ 5462, 5463, 5464, 5464, 5464, 5464, 5465, 5465,
+ 5465, 5466, 5467, 5468, 0, 5469, 5470, 5471,
+ 5472, 5473, 5474, 5475, 5476, 5477, 5478, 5479,
+ 5480, 5481, 5482, 5483, 5484, 5485, 5486, 5487,
+ 0, 5488, 5489, 5490, 5491, 0, 0, 0,
+ 0, 5492, 5493, 5494, 1176, 5495, 0, 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,
+ 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, 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, 0, 0,
+ 1509, 0, 5631, 5632, 5633, 5634, 5635, 5636,
+ 5637, 5638, 5639, 5640, 5641, 5642, 5643, 5644,
+ 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, 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, 5747, 5748,
+ 5749, 5750, 5751, 5752, 5753, 5754, 5755, 5756,
+ 5757, 5758, 5759, 5760, 5761, 5762, 5763, 5764,
+ 5765, 5766, 5767, 5768, 5769, 5770, 5771, 5772,
+ 5773, 5774, 5775, 5776, 5777, 5778, 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,
+ 0, 0, 0, 5821, 5822, 5823, 5824, 5825,
+ 5826, 0, 0, 5827, 5828, 5829, 5830, 5831,
+ 5832, 0, 0, 5833, 5834, 5835, 5836, 5837,
+ 5838, 0, 0, 5839, 5840, 5841, 0, 0,
+ 0, 5842, 5843, 5844, 5845, 5846, 5847, 5848,
+ 0, 5849, 5850, 5851, 5852, 5853, 5854, 5855,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5856, 5856, 5856, 78, 2477, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 0, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
@@ -4716,24 +4729,24 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 0, 0, 0, 0,
- 0, 1104, 8, 1104, 0, 0, 0, 0,
- 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
- 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
- 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
- 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
- 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
- 1242, 1242, 1242, 1242, 1242, 0, 0, 0,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 5854, 5854, 5854, 5854, 5854, 5854, 5854,
- 5854, 5854, 5854, 5854, 5854, 5854, 5854, 5854,
- 5854, 5854, 5854, 5854, 5854, 5854, 5854, 5854,
- 5854, 5854, 5854, 5854, 5854, 5854, 5854, 5854,
- 5854, 5854, 5854, 5854, 5854, 5854, 5854, 5854,
- 5854, 5854, 5854, 5854, 5854, 5854, 5854, 5854,
- 5854, 5854, 5854, 5854, 5854, 5854, 1268, 1268,
- 1268, 1268, 78, 78, 78, 78, 78, 78,
+ 0, 1103, 8, 1103, 0, 0, 0, 0,
+ 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 1241, 1241, 0, 0, 0,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 5857, 5857, 5857, 5857, 5857, 5857, 5857,
+ 5857, 5857, 5857, 5857, 5857, 5857, 5857, 5857,
+ 5857, 5857, 5857, 5857, 5857, 5857, 5857, 5857,
+ 5857, 5857, 5857, 5857, 5857, 5857, 5857, 5857,
+ 5857, 5857, 5857, 5857, 5857, 5857, 5857, 5857,
+ 5857, 5857, 5857, 5857, 5857, 5857, 5857, 5857,
+ 5857, 5857, 5857, 5857, 5857, 5857, 1267, 1267,
+ 1267, 1267, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 1268, 1268, 78, 897, 897,
+ 78, 78, 78, 1267, 1267, 78, 896, 896,
0, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 0, 0,
0, 78, 0, 0, 0, 0, 0, 0,
@@ -4742,12 +4755,12 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 1147, 0,
+ 0, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 1146, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -4776,53 +4789,53 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1147, 5855, 5855, 5855, 5855, 5855, 5855,
- 5855, 5855, 5855, 5855, 5855, 5855, 5855, 5855,
- 5855, 5855, 5855, 5855, 5855, 5855, 5855, 5855,
- 5855, 5855, 5855, 5855, 5855, 0, 0, 0,
+ 0, 1146, 5858, 5858, 5858, 5858, 5858, 5858,
+ 5858, 5858, 5858, 5858, 5858, 5858, 5858, 5858,
+ 5858, 5858, 5858, 5858, 5858, 5858, 5858, 5858,
+ 5858, 5858, 5858, 5858, 5858, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 1242, 1242, 1242, 1242, 0, 0, 0,
+ 349, 1241, 1241, 1241, 1241, 0, 0, 0,
0, 0, 0, 0, 0, 0, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 1507, 349, 349, 349, 349, 349,
- 349, 349, 349, 1507, 0, 0, 0, 0,
+ 349, 349, 1506, 349, 349, 349, 349, 349,
+ 349, 349, 349, 1506, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 898,
- 898, 898, 898, 898, 0, 0, 0, 0,
+ 349, 349, 349, 349, 349, 349, 349, 897,
+ 897, 897, 897, 897, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 0,
- 1104, 349, 349, 349, 349, 349, 349, 349,
+ 1103, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
- 349, 1104, 1507, 1507, 1507, 1507, 1507, 0,
+ 349, 1103, 1506, 1506, 1506, 1506, 1506, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 5856, 5857, 5858, 5859, 5860, 5861, 5862,
- 5863, 5864, 5865, 5866, 5867, 5868, 5869, 5870,
- 5871, 5872, 5873, 5874, 5875, 5876, 5877, 5878,
- 5879, 5880, 5881, 5882, 5883, 5884, 5885, 5886,
- 5887, 5888, 5889, 5890, 5891, 5892, 5893, 5894,
- 5895, 5896, 5897, 5898, 5899, 5900, 5901, 5902,
- 5903, 5904, 5905, 5906, 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, 5932, 5933, 5934,
- 5935, 349, 349, 349, 349, 349, 349, 349,
+ 0, 5859, 5860, 5861, 5862, 5863, 5864, 5865,
+ 5866, 5867, 5868, 5869, 5870, 5871, 5872, 5873,
+ 5874, 5875, 5876, 5877, 5878, 5879, 5880, 5881,
+ 5882, 5883, 5884, 5885, 5886, 5887, 5888, 5889,
+ 5890, 5891, 5892, 5893, 5894, 5895, 5896, 5897,
+ 5898, 5899, 5900, 5901, 5902, 5903, 5904, 5905,
+ 5906, 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, 5932, 5933, 5934, 5935, 5936, 5937,
+ 5938, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
@@ -4832,18 +4845,18 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 0,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 0,
- 0, 5936, 5937, 5938, 5939, 5940, 5941, 5942,
- 5943, 5944, 5945, 5946, 5947, 5948, 5949, 5950,
- 5951, 5952, 5953, 5954, 5955, 5956, 5957, 5958,
- 5959, 5960, 5961, 5962, 5963, 5964, 5965, 5966,
- 5967, 5968, 5969, 5970, 5971, 0, 0, 0,
- 0, 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, 0, 0, 0,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 0,
+ 0, 5939, 5940, 5941, 5942, 5943, 5944, 5945,
+ 5946, 5947, 5948, 5949, 5950, 5951, 5952, 5953,
+ 5954, 5955, 5956, 5957, 5958, 5959, 5960, 5961,
+ 5962, 5963, 5964, 5965, 5966, 5967, 5968, 5969,
+ 5970, 5971, 5972, 5973, 5974, 0, 0, 0,
+ 0, 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, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
@@ -4858,21 +4871,21 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 1104, 6008, 6009, 6010, 6011, 6012, 6013, 6014,
- 6015, 6016, 6017, 6018, 0, 6019, 6020, 6021,
- 6022, 6023, 6024, 6025, 6026, 6027, 6028, 6029,
- 6030, 6031, 6032, 6033, 0, 6034, 6035, 6036,
- 6037, 6038, 6039, 6040, 0, 6041, 6042, 0,
- 6043, 6044, 6045, 6046, 6047, 6048, 6049, 6050,
- 6051, 6052, 6053, 0, 6054, 6055, 6056, 6057,
- 6058, 6059, 6060, 6061, 6062, 6063, 6064, 6065,
- 6066, 6067, 6068, 0, 6069, 6070, 6071, 6072,
- 6073, 6074, 6075, 0, 6076, 6077, 0, 0,
+ 1103, 6011, 6012, 6013, 6014, 6015, 6016, 6017,
+ 6018, 6019, 6020, 6021, 0, 6022, 6023, 6024,
+ 6025, 6026, 6027, 6028, 6029, 6030, 6031, 6032,
+ 6033, 6034, 6035, 6036, 0, 6037, 6038, 6039,
+ 6040, 6041, 6042, 6043, 0, 6044, 6045, 0,
+ 6046, 6047, 6048, 6049, 6050, 6051, 6052, 6053,
+ 6054, 6055, 6056, 0, 6057, 6058, 6059, 6060,
+ 6061, 6062, 6063, 6064, 6065, 6066, 6067, 6068,
+ 6069, 6070, 6071, 0, 6072, 6073, 6074, 6075,
+ 6076, 6077, 6078, 0, 6079, 6080, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 6078, 349, 349, 349, 349, 349,
- 349, 349, 349, 6079, 349, 349, 349, 349,
- 349, 349, 349, 6080, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 6081, 349, 349,
+ 349, 349, 6081, 349, 349, 349, 349, 349,
+ 349, 349, 349, 6082, 349, 349, 349, 349,
+ 349, 349, 349, 6083, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 6084, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -4892,143 +4905,141 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 6082, 6083, 6084, 6085, 6086, 6087, 0,
- 6088, 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, 0, 6130, 6131, 6132, 6133, 6134,
- 6135, 6136, 6137, 6138, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1168, 1168, 1168, 1168, 1168, 1168, 0,
- 0, 1168, 0, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 0,
- 1168, 1168, 0, 0, 0, 1168, 0, 0,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 0,
- 1165, 6139, 6139, 6139, 6139, 6139, 6139, 6139,
- 6139, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 6140, 6140, 6139, 6139, 6139, 6139, 6139, 6139,
- 6139, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 6139, 6139, 6139, 6139, 6139, 6139, 6139, 6139,
- 6139, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 0, 1168, 1168, 0,
- 0, 0, 0, 0, 6139, 6139, 6139, 6139,
- 6139, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 6139,
- 6139, 6139, 6139, 6139, 6139, 0, 0, 0,
- 8, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 0, 0, 0, 0, 0,
- 1165, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 0, 0, 0, 0, 6139, 6139, 1168,
- 1168, 6139, 6139, 6139, 6139, 6139, 6139, 6139,
- 6139, 6139, 6139, 6139, 6139, 6139, 6139, 6139,
- 6139, 0, 0, 6139, 6139, 6139, 6139, 6139,
- 6139, 6139, 6139, 6139, 6139, 6139, 6139, 6139,
- 6139, 6139, 6139, 6139, 6139, 6139, 6139, 6139,
- 6139, 6139, 6139, 6139, 6139, 6139, 6139, 6139,
- 6139, 6139, 6139, 6139, 6139, 6139, 6139, 6139,
- 6139, 6139, 6139, 6139, 6139, 6139, 6139, 6139,
- 6139, 1168, 1210, 1210, 1210, 0, 1210, 1210,
- 0, 0, 0, 0, 0, 1210, 1147, 1210,
- 898, 1168, 1168, 1168, 1168, 0, 1168, 1168,
- 1168, 0, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 0,
- 0, 898, 1589, 1147, 0, 0, 0, 0,
- 1245, 6139, 6139, 6139, 6139, 6139, 6139, 6139,
- 6139, 6139, 0, 0, 0, 0, 0, 0,
- 0, 1165, 1165, 1165, 1165, 1165, 1165, 1165,
- 1165, 1165, 0, 0, 0, 0, 0, 0,
- 0, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 6139, 6139,
- 1165, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 6139, 6139,
- 6139, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 6140, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 898, 1147,
- 0, 0, 0, 0, 6139, 6139, 6139, 6139,
- 6139, 1165, 1165, 1165, 1165, 1165, 1165, 1165,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 0,
+ 0, 6085, 6086, 6087, 6088, 6089, 6090, 0,
+ 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, 0, 6133, 6134, 6135, 6136, 6137,
+ 6138, 6139, 6140, 6141, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1167, 1167, 1167, 1167, 1167, 1167, 0,
+ 0, 1167, 0, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 0,
+ 1167, 1167, 0, 0, 0, 1167, 0, 0,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 0,
+ 1164, 6142, 6142, 6142, 6142, 6142, 6142, 6142,
+ 6142, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 6143, 6143, 6142, 6142, 6142, 6142, 6142, 6142,
+ 6142, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 6142, 6142, 6142, 6142, 6142, 6142, 6142, 6142,
+ 6142, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 0, 1167, 1167, 0,
+ 0, 0, 0, 0, 6142, 6142, 6142, 6142,
+ 6142, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 6142,
+ 6142, 6142, 6142, 6142, 6142, 0, 0, 0,
+ 8, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 0, 0, 0, 0, 0,
+ 1164, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 0, 0, 0, 0, 6142, 6142, 1167,
+ 1167, 6142, 6142, 6142, 6142, 6142, 6142, 6142,
+ 6142, 6142, 6142, 6142, 6142, 6142, 6142, 6142,
+ 6142, 0, 0, 6142, 6142, 6142, 6142, 6142,
+ 6142, 6142, 6142, 6142, 6142, 6142, 6142, 6142,
+ 6142, 6142, 6142, 6142, 6142, 6142, 6142, 6142,
+ 6142, 6142, 6142, 6142, 6142, 6142, 6142, 6142,
+ 6142, 6142, 6142, 6142, 6142, 6142, 6142, 6142,
+ 6142, 6142, 6142, 6142, 6142, 6142, 6142, 6142,
+ 6142, 6144, 1209, 1209, 1209, 0, 1209, 1209,
+ 0, 0, 0, 0, 0, 1209, 1146, 1209,
+ 897, 6144, 6144, 6144, 6144, 0, 6144, 6144,
+ 6144, 0, 6144, 6144, 6144, 6144, 6144, 6144,
+ 6144, 6144, 6144, 6144, 6144, 6144, 6144, 6144,
+ 6144, 6144, 6144, 6144, 6144, 6144, 6144, 6144,
+ 6144, 6144, 6144, 6144, 6144, 6144, 6144, 0,
+ 0, 897, 1590, 1146, 0, 0, 0, 0,
+ 1223, 6142, 6142, 6142, 6142, 6142, 6142, 6142,
+ 6142, 6142, 0, 0, 0, 0, 0, 0,
+ 0, 1164, 1164, 1164, 1164, 1164, 1164, 1164,
+ 1164, 1164, 0, 0, 0, 0, 0, 0,
+ 0, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 6142, 6142,
+ 1164, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 6142, 6142,
+ 6142, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 6143, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 897, 1146,
+ 0, 0, 0, 0, 6142, 6142, 6142, 6142,
+ 6142, 1164, 1164, 1164, 1164, 1164, 1164, 1164,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 0,
0, 0, 8, 8, 8, 8, 8, 8,
- 8, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 0,
- 0, 6139, 6139, 6139, 6139, 6139, 6139, 6139,
- 6139, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 0, 0, 0, 0,
- 0, 6139, 6139, 6139, 6139, 6139, 6139, 6139,
- 6139, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 0, 0, 0, 0, 0,
- 0, 0, 1165, 1165, 1165, 1165, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 6139, 6139, 6139, 6139, 6139, 6139,
- 6139, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 0,
+ 0, 6142, 6142, 6142, 6142, 6142, 6142, 6142,
+ 6142, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 0, 0, 0, 0,
+ 0, 6142, 6142, 6142, 6142, 6142, 6142, 6142,
+ 6142, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 0, 0, 0, 0, 0,
+ 0, 0, 1164, 1164, 1164, 1164, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6142, 6142, 6142, 6142, 6142, 6142,
+ 6142, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -5036,60 +5047,59 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 6141, 6142, 6143, 6144, 6145, 6146, 6147,
- 6148, 6149, 6150, 6151, 6152, 6153, 6154, 6155,
- 6156, 6157, 6158, 6159, 6160, 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,
- 6188, 6189, 6190, 6191, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 6192, 6193, 6194, 6195, 6196, 6197, 6198,
- 6199, 6200, 6201, 6202, 6203, 6204, 6205, 6206,
- 6207, 6208, 6209, 6210, 6211, 6212, 6213, 6214,
- 6215, 6216, 6217, 6218, 6219, 6220, 6221, 6222,
- 6223, 6224, 6225, 6226, 6227, 6228, 6229, 6230,
- 6231, 6232, 6233, 6234, 6235, 6236, 6237, 6238,
- 6239, 6240, 6241, 6242, 0, 0, 0, 0,
- 0, 0, 0, 6139, 6139, 6139, 6139, 6139,
- 6139, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 898, 898, 898,
- 898, 0, 0, 0, 0, 0, 0, 0,
- 0, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
- 1194, 1194, 1194, 0, 0, 0, 0, 0,
- 0, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
- 1194, 1194, 1194, 1168, 1168, 1168, 1168, 1212,
- 1168, 6243, 6244, 6245, 6246, 6247, 6248, 6249,
- 6250, 6251, 6252, 6253, 6254, 6255, 6256, 6257,
- 6258, 6259, 6260, 6261, 6262, 6263, 6264, 0,
- 0, 0, 898, 898, 898, 898, 898, 1146,
- 1212, 6265, 6266, 6267, 6268, 6269, 6270, 6271,
- 6272, 6273, 6274, 6275, 6276, 6277, 6278, 6279,
- 6280, 6281, 6282, 6283, 6284, 6285, 6286, 0,
- 0, 0, 0, 0, 0, 0, 0, 6287,
- 6287, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 6145, 6146, 6147, 6148, 6149, 6150, 6151,
+ 6152, 6153, 6154, 6155, 6156, 6157, 6158, 6159,
+ 6160, 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, 6188, 6189, 6190, 6191,
+ 6192, 6193, 6194, 6195, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 6196, 6197, 6198, 6199, 6200, 6201, 6202,
+ 6203, 6204, 6205, 6206, 6207, 6208, 6209, 6210,
+ 6211, 6212, 6213, 6214, 6215, 6216, 6217, 6218,
+ 6219, 6220, 6221, 6222, 6223, 6224, 6225, 6226,
+ 6227, 6228, 6229, 6230, 6231, 6232, 6233, 6234,
+ 6235, 6236, 6237, 6238, 6239, 6240, 6241, 6242,
+ 6243, 6244, 6245, 6246, 0, 0, 0, 0,
+ 0, 0, 0, 6142, 6142, 6142, 6142, 6142,
+ 6142, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 897, 897, 897,
+ 897, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1193, 1193, 1193, 1193, 1193, 1193, 1193,
+ 1193, 1193, 1193, 0, 0, 0, 0, 0,
+ 0, 1193, 1193, 1193, 1193, 1193, 1193, 1193,
+ 1193, 1193, 1193, 1167, 1167, 1167, 1167, 1211,
+ 1167, 6247, 6248, 6249, 6250, 6251, 6252, 6253,
+ 6254, 6255, 6256, 6257, 6258, 6259, 6260, 6261,
+ 6262, 6263, 6264, 6265, 6266, 6267, 6268, 0,
+ 0, 0, 897, 897, 897, 897, 897, 1145,
+ 1211, 6269, 6270, 6271, 6272, 6273, 6274, 6275,
+ 6276, 6277, 6278, 6279, 6280, 6281, 6282, 6283,
+ 6284, 6285, 6286, 6287, 6288, 6289, 6290, 0,
+ 0, 0, 0, 0, 0, 0, 0, 6291,
+ 6291, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -5112,131 +5122,134 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 6288, 6288, 6288, 6288, 6288, 6288, 6288,
- 6288, 6288, 6288, 6288, 6288, 6288, 6288, 6288,
- 6288, 6288, 6288, 6288, 6288, 6288, 6288, 6288,
- 6288, 6288, 6288, 6288, 6288, 6288, 6288, 6288,
- 0, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 0, 898, 898, 1163, 0,
- 0, 1168, 1168, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1177, 1177, 1177, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 6292, 6292, 6292, 6292, 6292, 6292, 6292,
+ 6292, 6292, 6292, 6292, 6292, 6292, 6292, 6292,
+ 6292, 6292, 6292, 6292, 6292, 6292, 6292, 6292,
+ 6292, 6292, 6292, 6292, 6292, 6292, 6292, 6292,
+ 0, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 0, 897, 897, 1162, 0,
+ 0, 1167, 1167, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1176, 1176, 1176, 1183, 1176,
+ 1176, 0, 0, 0, 0, 0, 0, 0,
+ 0, 8, 78, 78, 78, 78, 78, 78,
+ 78, 78, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1210, 1147, 1147,
- 1147, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 6139, 6139,
- 6139, 6139, 6139, 6139, 6139, 6139, 6139, 6139,
- 1168, 0, 0, 0, 0, 0, 0, 0,
- 0, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
- 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1147,
- 1147, 898, 898, 898, 1147, 898, 1147, 1147,
- 1147, 1147, 6289, 6289, 6289, 6289, 1172, 1172,
- 1172, 1172, 1172, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1146, 1146, 1209, 1146, 1146,
+ 1146, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 6142, 6142,
+ 6142, 6142, 6142, 6142, 6142, 6142, 6142, 6142,
+ 1167, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1146,
+ 1146, 897, 897, 897, 1146, 897, 1146, 1146,
+ 1146, 1146, 6293, 6293, 6293, 6293, 1171, 1171,
+ 1171, 1171, 1171, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 898, 1147, 898, 1147, 1165,
- 1165, 1165, 1165, 0, 0, 0, 0, 0,
+ 0, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 897, 1146, 897, 1146, 1164,
+ 1164, 1164, 1164, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 6139, 6139,
- 6139, 6139, 6139, 6139, 6139, 0, 0, 0,
+ 0, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 6142, 6142,
+ 6142, 6142, 6142, 6142, 6142, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
+ 0, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1215, 1210, 1215, 349, 349, 349, 349,
+ 0, 1214, 1209, 1214, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1245,
- 1104, 1104, 1104, 1104, 1104, 1104, 1104, 0,
- 0, 0, 0, 1268, 1268, 1268, 1268, 1268,
- 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268,
- 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1233,
- 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1245, 349, 349, 1210, 1210, 349, 0,
+ 349, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1244,
+ 1103, 1103, 1103, 1103, 1103, 1103, 1103, 0,
+ 0, 0, 0, 1267, 1267, 1267, 1267, 1267,
+ 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
+ 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1232,
+ 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1244, 349, 349, 1209, 1209, 349, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 1245, 1210, 1210, 1215, 349, 349, 349, 349,
+ 1244, 1209, 1209, 1214, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 6290, 6291, 6292, 6293, 349, 349,
- 349, 349, 349, 349, 349, 349, 6294, 349,
- 349, 349, 349, 349, 6295, 349, 349, 349,
- 349, 1215, 1215, 1215, 1210, 1210, 1210, 1210,
- 1215, 1215, 1245, 1223, 1104, 1104, 6296, 1104,
- 1104, 1104, 1104, 1210, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 6296, 0,
+ 349, 349, 6294, 6295, 6296, 6297, 349, 349,
+ 349, 349, 349, 349, 349, 349, 6298, 349,
+ 349, 349, 349, 349, 6299, 349, 349, 349,
+ 349, 1214, 1214, 1214, 1209, 1209, 1209, 1209,
+ 1214, 1214, 1244, 1222, 1103, 1103, 6300, 1103,
+ 1103, 1103, 1103, 1209, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6300, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 0, 0, 0, 0, 0, 0,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 0,
- 0, 898, 898, 898, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 1254, 1210, 1210, 1210, 1210, 1215, 1210, 6297,
- 6298, 1210, 6299, 6300, 1245, 1245, 0, 1233,
- 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1104, 1104, 1104, 1104, 349, 1215, 1215,
- 349, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 0,
+ 0, 897, 897, 897, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1253, 1209, 1209, 1209, 1209, 1214, 1209, 6301,
+ 6302, 1209, 6303, 6304, 1223, 1244, 0, 1232,
+ 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1103, 1103, 1103, 1103, 1215, 1214, 1214,
+ 1215, 0, 0, 0, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 1234, 1104, 1104, 349,
+ 349, 349, 349, 349, 1233, 1103, 1103, 349,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1210, 1210, 1215, 349, 349, 349, 349,
+ 0, 1209, 1209, 1214, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 1215, 1215, 1215, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1215, 1508, 349, 1281, 1281, 349, 1104, 1104,
- 1104, 1104, 1210, 1234, 1210, 1210, 1104, 1215,
- 1210, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 349, 1104, 349, 1104, 1104,
- 1104, 0, 1242, 1242, 1242, 1242, 1242, 1242,
- 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
- 1242, 1242, 1242, 1242, 1242, 1242, 0, 0,
+ 349, 349, 349, 349, 1214, 1214, 1214, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1214, 1507, 349, 1280, 1280, 349, 1103, 1103,
+ 1103, 1103, 1209, 1233, 1209, 1209, 1103, 1214,
+ 1209, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 349, 1103, 349, 1103, 1103,
+ 1103, 0, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 1241, 1241, 1241, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 0, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 1215, 1215, 1215,
- 1210, 1210, 1210, 1215, 1215, 1210, 1508, 1234,
- 1210, 1104, 1104, 1104, 1104, 1104, 1104, 1210,
- 349, 349, 1210, 0, 0, 0, 0, 0,
+ 349, 349, 349, 349, 349, 1214, 1214, 1214,
+ 1209, 1209, 1209, 1214, 1214, 1209, 1507, 1233,
+ 1209, 1103, 1103, 1103, 1103, 1103, 1103, 1209,
+ 349, 349, 1209, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -5249,46 +5262,46 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 0,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 1104, 0, 0, 0, 0, 0,
+ 349, 349, 1103, 0, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 1210, 1215, 1215, 1215, 1210, 1210, 1210, 1210,
- 1210, 1210, 1234, 1245, 0, 0, 0, 0,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 0,
- 0, 1210, 1210, 1215, 1215, 0, 349, 349,
+ 1209, 1214, 1214, 1214, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1233, 1244, 0, 0, 0, 0,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 0,
+ 0, 1209, 1209, 1214, 1214, 0, 349, 349,
349, 349, 349, 349, 349, 349, 0, 0,
349, 349, 0, 0, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 0, 349, 349, 349, 349, 349,
349, 349, 0, 349, 349, 0, 349, 349,
- 349, 349, 349, 0, 1234, 1234, 349, 1235,
- 1215, 1210, 1215, 1215, 1215, 1215, 0, 0,
- 6301, 1215, 0, 0, 6302, 6303, 1508, 0,
+ 349, 349, 349, 0, 1233, 1233, 349, 1234,
+ 1214, 1209, 1214, 1214, 1214, 1214, 0, 0,
+ 6305, 1214, 0, 0, 6306, 6307, 1507, 0,
0, 349, 0, 0, 0, 0, 0, 0,
- 1235, 0, 0, 0, 0, 0, 349, 349,
- 349, 349, 349, 1215, 1215, 0, 0, 898,
- 898, 898, 898, 898, 898, 898, 0, 0,
- 0, 898, 898, 898, 898, 898, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 349, 349, 6304, 6305, 6306, 6307, 349,
- 349, 349, 349, 0, 6308, 0, 0, 6309,
- 0, 6310, 6311, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 0,
- 349, 1235, 1215, 1215, 1254, 1210, 1210, 1210,
- 1210, 1210, 0, 6312, 0, 0, 6313, 0,
- 6314, 6315, 1235, 1215, 0, 1215, 1215, 1245,
- 1508, 1245, 1281, 1210, 349, 1104, 1104, 0,
- 1104, 1104, 0, 0, 0, 0, 0, 0,
- 0, 0, 1210, 1210, 0, 0, 0, 0,
+ 1234, 0, 0, 0, 0, 0, 349, 349,
+ 349, 349, 349, 1214, 1214, 0, 0, 897,
+ 897, 897, 897, 897, 897, 897, 0, 0,
+ 0, 897, 897, 897, 897, 897, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1215, 1215, 6308, 6309, 6310, 6311, 1215,
+ 1215, 1215, 1215, 0, 6312, 0, 0, 6313,
+ 0, 6314, 6315, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 0,
+ 349, 1234, 1214, 1214, 1253, 1209, 1209, 1209,
+ 1209, 1209, 0, 6316, 0, 0, 6317, 0,
+ 6318, 6319, 1234, 1214, 0, 1214, 1214, 1244,
+ 1507, 1223, 1280, 1209, 349, 1103, 1103, 0,
+ 1103, 1103, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1209, 1209, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -5298,12 +5311,12 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 1215, 1215,
- 1215, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1215, 1215, 1245, 1210, 1210, 1215, 1234,
- 349, 349, 349, 349, 1104, 1104, 1104, 1104,
- 1104, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 1104, 1104, 0, 1104, 898,
+ 349, 349, 349, 349, 349, 349, 1214, 1214,
+ 1214, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1214, 1214, 1244, 1209, 1209, 1214, 1233,
+ 349, 349, 349, 349, 1103, 1103, 1103, 1103,
+ 1103, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 1103, 1103, 0, 1103, 897,
349, 349, 349, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -5314,12 +5327,12 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 1235, 1215, 1215, 1210, 1210, 1210, 1210,
- 1210, 1210, 6316, 1254, 6317, 6318, 1235, 6319,
- 1210, 1210, 1215, 1245, 1234, 349, 349, 1104,
+ 349, 1234, 1214, 1214, 1209, 1209, 1209, 1209,
+ 1209, 1209, 6320, 1253, 6321, 6322, 1234, 6323,
+ 1209, 1209, 1214, 1244, 1233, 349, 349, 1103,
349, 0, 0, 0, 0, 0, 0, 0,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 0,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -5346,12 +5359,12 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 1235, 1215, 1215, 1210, 1210, 1210, 1210, 0,
- 0, 6320, 6321, 6322, 6323, 1210, 1210, 1215,
- 1245, 1234, 1104, 1104, 1104, 1104, 1104, 1104,
- 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104,
- 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104,
- 1104, 349, 349, 349, 349, 1210, 1210, 0,
+ 1234, 1214, 1214, 1209, 1209, 1209, 1209, 0,
+ 0, 6324, 6325, 6326, 6327, 1209, 1209, 1214,
+ 1244, 1233, 1103, 1103, 1103, 1103, 1103, 1103,
+ 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+ 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+ 1103, 349, 349, 349, 349, 1209, 1209, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -5362,12 +5375,12 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 1215, 1215, 1215, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1215, 1215, 1210, 1215,
- 1245, 1210, 1104, 1104, 1104, 349, 0, 0,
+ 349, 1214, 1214, 1214, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1214, 1214, 1209, 1214,
+ 1244, 1209, 1103, 1103, 1103, 349, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 0,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 0,
0, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -5377,26 +5390,26 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 1210, 1215, 1210, 1215,
- 1215, 1210, 1210, 1210, 1210, 1210, 1210, 1508,
- 1234, 349, 1104, 0, 0, 0, 0, 0,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 0,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 1233, 1233, 0, 0, 0,
+ 349, 349, 349, 349, 1209, 1214, 1209, 1214,
+ 1214, 1209, 1209, 1209, 1209, 1209, 1209, 1507,
+ 1233, 349, 1103, 0, 0, 0, 0, 0,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 0,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 1232, 1232, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 0, 0, 1210, 1215,
- 1210, 1322, 1322, 1210, 1210, 1210, 1210, 1215,
- 1210, 1210, 1210, 1210, 1245, 0, 0, 0,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 1242, 1242, 1104, 1104, 1104,
- 897, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 0, 0, 1209, 1214,
+ 1209, 1321, 1321, 1209, 1209, 1209, 1209, 1214,
+ 1209, 1209, 1209, 1209, 1244, 0, 0, 0,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 1241, 1241, 1103, 1103, 1103,
+ 896, 349, 349, 349, 349, 349, 349, 349,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -5425,9 +5438,9 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 1215, 1215, 1215,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1215, 1245, 1234, 1104, 0, 0, 0,
+ 349, 349, 349, 349, 349, 1214, 1214, 1214,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1214, 1244, 1233, 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,
@@ -5440,30 +5453,30 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 6324, 6325, 6326, 6327, 6328, 6329, 6330,
- 6331, 6332, 6333, 6334, 6335, 6336, 6337, 6338,
- 6339, 6340, 6341, 6342, 6343, 6344, 6345, 6346,
- 6347, 6348, 6349, 6350, 6351, 6352, 6353, 6354,
- 6355, 6356, 6357, 6358, 6359, 6360, 6361, 6362,
- 6363, 6364, 6365, 6366, 6367, 6368, 6369, 6370,
- 6371, 6372, 6373, 6374, 6375, 6376, 6377, 6378,
- 6379, 6380, 6381, 6382, 6383, 6384, 6385, 6386,
- 6387, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 1242, 1242, 1242, 1242, 1242,
- 1242, 1242, 1242, 1242, 0, 0, 0, 0,
+ 0, 6328, 6329, 6330, 6331, 6332, 6333, 6334,
+ 6335, 6336, 6337, 6338, 6339, 6340, 6341, 6342,
+ 6343, 6344, 6345, 6346, 6347, 6348, 6349, 6350,
+ 6351, 6352, 6353, 6354, 6355, 6356, 6357, 6358,
+ 6359, 6360, 6361, 6362, 6363, 6364, 6365, 6366,
+ 6367, 6368, 6369, 6370, 6371, 6372, 6373, 6374,
+ 6375, 6376, 6377, 6378, 6379, 6380, 6381, 6382,
+ 6383, 6384, 6385, 6386, 6387, 6388, 6389, 6390,
+ 6391, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 1241, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 0, 0, 349, 0, 0, 349, 349, 349,
- 349, 349, 349, 349, 349, 0, 349, 349,
- 0, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 1235, 1215, 1215, 1215, 1215, 6388, 0,
- 1215, 6389, 0, 0, 1210, 1210, 1508, 1245,
- 1281, 1215, 1281, 1215, 1234, 1104, 1104, 1104,
+ 349, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 0, 0, 1215, 0, 0, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 0, 1215, 1215,
+ 0, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1234, 1214, 1214, 1214, 1214, 6392, 0,
+ 1214, 6393, 0, 0, 1209, 1209, 1507, 1223,
+ 1280, 1214, 1280, 1214, 1233, 1103, 1103, 1103,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 0,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -5478,33 +5491,33 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 1215, 1215, 1215, 1210, 1210, 1210,
- 1210, 0, 0, 1210, 1210, 1215, 1215, 1215,
- 1215, 1245, 349, 1104, 349, 1215, 0, 0,
+ 349, 349, 1214, 1214, 1214, 1209, 1209, 1209,
+ 1209, 0, 0, 1209, 1209, 1214, 1214, 1214,
+ 1214, 1244, 349, 1103, 349, 1214, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 349, 1210, 1210, 1210, 1210, 1210, 1210,
- 6390, 6390, 1210, 1210, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 1210, 1245, 1210, 1210,
- 1210, 1210, 1215, 1281, 1210, 1210, 1210, 1210,
- 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104,
- 1245, 0, 0, 0, 0, 0, 0, 0,
- 0, 349, 1210, 1210, 1210, 1210, 1210, 1210,
- 1215, 1215, 1210, 1210, 1210, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 1281, 1281, 1281,
- 1281, 1281, 1281, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1215, 1210, 1245, 1104, 1104, 1104, 349, 1104,
- 1104, 1104, 1104, 1104, 0, 0, 0, 0,
+ 0, 1215, 1209, 1209, 1209, 1209, 1209, 1209,
+ 6394, 6394, 1209, 1209, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1209, 1244, 1209, 1209,
+ 1209, 1209, 1214, 349, 1209, 1209, 1209, 1209,
+ 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+ 1223, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1215, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1214, 1214, 1209, 1209, 1209, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1280, 1280, 1280,
+ 1280, 1280, 1280, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1214, 1209, 1223, 1103, 1103, 1103, 349, 1103,
+ 1103, 1103, 1103, 1103, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
@@ -5516,10 +5529,8 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 0, 0, 0, 0, 0, 0,
- 0, 1104, 1104, 1104, 1104, 1104, 1104, 1104,
- 1104, 1104, 1104, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+ 1103, 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,
@@ -5530,6 +5541,8 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1209, 1214, 1209, 1209, 1209, 1214, 1209,
+ 1214, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -5544,33 +5557,33 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 1104, 0, 0, 0, 0, 0,
+ 349, 349, 1103, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 0,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 0, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 1215, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 0, 1210, 1210, 1210, 1210, 1210, 1210, 1215,
- 6391, 349, 1104, 1104, 1104, 1104, 1104, 0,
+ 1214, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 0, 1209, 1209, 1209, 1209, 1209, 1209, 1214,
+ 6395, 349, 1103, 1103, 1103, 1103, 1103, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 1242, 1242, 1242, 1242, 1242,
- 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
- 1242, 1242, 1242, 1242, 1242, 1242, 0, 0,
- 0, 1104, 1104, 349, 349, 349, 349, 349,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 1241, 1241, 1241, 0, 0,
+ 0, 1103, 1103, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 0, 0, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 0, 1215, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1215, 1210, 1210, 1215, 1210, 1210,
+ 349, 0, 0, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 0, 1214, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1214, 1209, 1209, 1214, 1209, 1209,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -5586,30 +5599,30 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 1210, 1210, 1210, 1210, 1210, 1210,
- 0, 0, 0, 1210, 0, 1210, 1210, 0,
- 1210, 1210, 1210, 1234, 1210, 1245, 1245, 1281,
- 1210, 0, 0, 0, 0, 0, 0, 0,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 0,
+ 349, 349, 1209, 1209, 1209, 1209, 1209, 1209,
+ 0, 0, 0, 1209, 0, 1209, 1209, 0,
+ 1209, 1209, 1209, 1233, 1209, 1244, 1244, 1280,
+ 1209, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 0,
349, 349, 0, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 1215, 1215, 1215, 1215, 1215,
- 0, 1210, 1210, 0, 1215, 1215, 1210, 1215,
- 1245, 349, 0, 0, 0, 0, 0, 0,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
+ 349, 349, 349, 1214, 1214, 1214, 1214, 1214,
+ 0, 1209, 1209, 0, 1214, 1214, 1209, 1214,
+ 1244, 349, 0, 0, 0, 0, 0, 0,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 0,
+ 0, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 598, 349, 349, 0, 0, 0,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -5642,20 +5655,20 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 1210, 1210, 1215, 1215,
- 1104, 1104, 0, 0, 0, 0, 0, 0,
- 0, 1210, 1210, 1281, 1215, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 0, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 1215, 1215, 1210,
- 1210, 1210, 1210, 1210, 0, 0, 0, 1215,
- 1215, 1210, 1508, 1245, 1104, 1104, 1104, 1104,
- 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104,
- 1104, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 1210, 0, 0, 0, 0,
+ 349, 349, 349, 349, 1209, 1209, 1214, 1214,
+ 1103, 1103, 0, 0, 0, 0, 0, 0,
+ 0, 1209, 1209, 1280, 1214, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 0, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1214, 1214, 1209,
+ 1209, 1209, 1209, 1209, 0, 0, 0, 1214,
+ 1214, 1209, 1507, 1223, 1103, 1103, 1103, 1103,
+ 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+ 1103, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 1209, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -5668,15 +5681,15 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 349, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
- 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
- 1242, 1242, 1242, 1242, 1242, 1242, 78, 78,
+ 0, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 1241, 1241, 1241, 78, 78,
78, 78, 78, 78, 78, 78, 10, 10,
10, 10, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 1104, 349, 349, 349, 349, 349, 349, 349,
+ 1103, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
@@ -5708,21 +5721,21 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 0, 1104, 1104, 1104, 1104, 1104, 0, 0,
+ 0, 1506, 1506, 1506, 1506, 1506, 1506, 1506,
+ 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506,
+ 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506,
+ 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506,
+ 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506,
+ 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506,
+ 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506,
+ 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506,
+ 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506,
+ 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506,
+ 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506,
+ 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506,
+ 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506,
+ 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506,
+ 0, 1103, 1103, 1103, 1103, 1103, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
@@ -5834,7 +5847,7 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 1104, 1104, 0, 0, 0, 0,
+ 349, 349, 1103, 1103, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
@@ -5842,11 +5855,11 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 6392, 6392, 6392, 6392, 6392, 6392, 6392,
- 6392, 6392, 6392, 6392, 6392, 6392, 6392, 6392,
- 6392, 1210, 349, 349, 349, 349, 349, 349,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 0,
+ 349, 6396, 6396, 6396, 6396, 6396, 6396, 6396,
+ 6396, 6396, 6396, 6396, 6396, 6396, 6396, 6396,
+ 6396, 1209, 349, 349, 349, 349, 349, 349,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
@@ -5935,11 +5948,11 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 6393,
- 1254, 1254, 6394, 6395, 6396, 6397, 6398, 6399,
- 6400, 6401, 6402, 1215, 1215, 1215, 1210, 1210,
- 1245, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 0,
+ 349, 349, 349, 349, 349, 349, 349, 6397,
+ 1253, 1253, 6398, 6399, 6400, 6401, 6402, 6403,
+ 6404, 6405, 6406, 1214, 1214, 1214, 1209, 1209,
+ 1244, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -5976,9 +5989,9 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 1104,
- 1104, 349, 349, 349, 349, 349, 349, 349,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 1103,
+ 1103, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
@@ -5988,13 +6001,13 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 0,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 0,
- 0, 1589, 1589, 1589, 1589, 1589, 1104, 0,
+ 0, 1590, 1590, 1590, 1590, 1590, 1103, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
@@ -6002,13 +6015,13 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 898, 898, 898, 898, 898, 898, 898,
- 1104, 1104, 1104, 1104, 1104, 897, 897, 897,
- 897, 599, 599, 599, 599, 1104, 897, 0,
+ 349, 897, 897, 897, 897, 897, 897, 897,
+ 1103, 1103, 1103, 1103, 1103, 896, 896, 896,
+ 896, 598, 598, 598, 598, 1103, 896, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 1242, 1242, 1242, 1242,
- 1242, 1242, 1242, 0, 349, 349, 349, 349,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 0, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 0, 0, 0, 0, 0, 349, 349,
@@ -6036,19 +6049,14 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 599, 599, 599, 349, 349, 349, 349,
+ 0, 598, 598, 598, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 6403, 349, 349, 349,
- 6404, 6405, 6406, 6407, 599, 599, 1104, 1104,
- 1104, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
+ 349, 349, 349, 349, 6407, 349, 349, 349,
+ 6408, 6409, 6410, 6411, 598, 598, 1103, 1103,
+ 1103, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -6068,25 +6076,30 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 6408, 6409, 6410, 6411, 6412, 6413, 6414,
- 6415, 6416, 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, 6443, 6444, 6445, 6446,
- 6447, 6448, 6449, 6450, 6451, 6452, 6453, 6454,
- 6455, 6456, 6457, 6458, 6459, 6460, 6461, 6462,
- 6463, 6464, 6465, 6466, 6467, 6468, 6469, 6470,
- 6471, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
- 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
- 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
- 1104, 1104, 1104, 1104, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 6412, 6413, 6414, 6415, 6416, 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,
+ 6443, 6444, 6445, 6446, 6447, 6448, 6449, 6450,
+ 6451, 6452, 6453, 6454, 6455, 6456, 6457, 6458,
+ 6459, 6460, 6461, 6462, 6463, 6464, 6465, 6466,
+ 6467, 6468, 6469, 6470, 6471, 6472, 6473, 6474,
+ 6475, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1103, 1103, 1103, 1103, 0, 0, 0, 0,
+ 0, 6476, 6477, 6478, 6479, 6480, 6481, 6482,
+ 6483, 6484, 6485, 6486, 6487, 6488, 6489, 6490,
+ 6491, 6492, 6493, 6494, 6495, 6496, 6497, 6498,
+ 6499, 6500, 0, 0, 6501, 6502, 6503, 6504,
+ 6505, 6506, 6507, 6508, 6509, 6510, 6511, 6512,
+ 6513, 6514, 6515, 6516, 6517, 6518, 6519, 6520,
+ 6521, 6522, 6523, 6524, 6525, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -6102,97 +6115,17 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 0, 0, 0, 0,
- 1210, 349, 1215, 1215, 1215, 1215, 1215, 1215,
- 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
- 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
- 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
- 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
- 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
- 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
- 1215, 0, 0, 0, 0, 0, 0, 0,
- 1210, 1210, 1210, 1210, 599, 599, 599, 599,
- 599, 599, 599, 599, 599, 599, 599, 599,
- 599, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3212, 3212, 3211, 3212, 1210, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 6472, 6472, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 0, 0, 0, 0, 0, 0, 0,
- 0, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
+ 1209, 349, 1214, 1214, 1214, 1214, 1214, 1214,
+ 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214,
+ 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214,
+ 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214,
+ 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214,
+ 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214,
+ 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214,
+ 1214, 0, 0, 0, 0, 0, 0, 0,
+ 1209, 1209, 1209, 1209, 598, 598, 598, 598,
+ 598, 598, 598, 598, 598, 598, 598, 598,
+ 598, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -6200,13 +6133,46 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3210, 3210, 3209, 3210, 1209, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 6526, 6526, 3210, 3210, 3212, 3212, 3212,
0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -6219,6 +6185,21 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -6250,72 +6231,72 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3212, 3212, 3212, 3212, 0, 3212, 3212,
- 3212, 3212, 3212, 3212, 3212, 0, 3212, 3212,
- 0, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 0, 0, 0, 0,
+ 0, 3210, 3210, 3210, 3210, 0, 3210, 3210,
+ 3210, 3210, 3210, 3210, 3210, 0, 3210, 3210,
+ 0, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3213, 0, 0, 0, 0,
+ 0, 0, 0, 3211, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3213, 3213, 3213, 0, 0, 3213, 0,
+ 0, 3211, 3211, 3211, 0, 0, 3211, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3213, 3213, 3213,
- 3213, 0, 0, 0, 0, 0, 0, 0,
- 0, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3211, 3211, 3211,
+ 3211, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
@@ -6335,8 +6316,8 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 0, 0, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 0, 0, 897, 1210, 1589,
- 1104, 1510, 1510, 1510, 1510, 0, 0, 0,
+ 349, 349, 349, 0, 0, 896, 1209, 1590,
+ 1103, 1509, 1509, 1509, 1509, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -6374,12 +6355,12 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 6473,
- 6474, 6475, 6476, 6477, 6478, 6479, 6480, 6481,
- 6482, 6483, 6484, 6485, 6486, 6487, 6488, 6489,
- 6490, 6491, 6492, 6493, 6494, 6495, 6496, 6497,
- 6498, 6499, 6500, 6501, 6502, 6503, 6504, 6505,
- 6506, 6507, 6508, 0, 0, 0, 0, 0,
+ 78, 78, 78, 78, 78, 78, 78, 6527,
+ 6528, 6529, 6530, 6531, 6532, 6533, 6534, 6535,
+ 6536, 6537, 6538, 6539, 6540, 6541, 6542, 6543,
+ 6544, 6545, 6546, 6547, 6548, 6549, 6550, 6551,
+ 6552, 6553, 6554, 6555, 6556, 6557, 6558, 6559,
+ 6560, 6561, 6562, 78, 78, 78, 0, 0,
0, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
@@ -6435,40 +6416,126 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 0, 0, 0,
+ 0, 0, 0, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 74, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 0,
+ 0, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 0, 0, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 6563,
+ 6564, 6565, 6566, 6567, 6568, 6569, 6570, 6570,
+ 1590, 1590, 1590, 896, 896, 896, 6571, 6570,
+ 6570, 6570, 6570, 6570, 1509, 1509, 1509, 1509,
+ 1509, 1509, 1509, 1509, 1146, 1146, 1146, 1146,
+ 1146, 1146, 1146, 1146, 896, 896, 897, 897,
+ 897, 897, 897, 1146, 1146, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 897, 897, 897, 897, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 6572, 6573, 6574, 6575,
+ 6576, 6577, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 78, 78, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 897, 897, 897, 78, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 0,
- 0, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -6476,81 +6543,32 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 0, 0, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 6509,
- 6510, 6511, 6512, 6513, 6514, 6515, 6516, 6516,
- 1589, 1589, 1589, 897, 897, 897, 6517, 6516,
- 6516, 6516, 6516, 6516, 1510, 1510, 1510, 1510,
- 1510, 1510, 1510, 1510, 1147, 1147, 1147, 1147,
- 1147, 1147, 1147, 1147, 897, 897, 898, 898,
- 898, 898, 898, 1147, 1147, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 898, 898, 898, 898, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 6518, 6519, 6520, 6521,
- 6522, 6523, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 78, 78, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 1241, 1241, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 898, 898, 898, 78, 0,
+ 0, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
+ 1241, 1241, 1241, 1241, 1241, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+ 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 6578, 6578, 6578, 6578, 6578, 6578, 6578,
+ 6578, 6578, 6578, 6578, 6578, 6578, 6578, 6578,
+ 6578, 6578, 6578, 6578, 6578, 6578, 6578, 6578,
+ 1241, 1241, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -6564,197 +6582,160 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
- 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
- 1242, 1242, 1242, 1242, 1242, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
- 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
- 1242, 1242, 1242, 1242, 1242, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
- 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 6524, 6524, 6524, 6524, 6524, 6524, 6524,
- 6524, 6524, 6524, 6524, 6524, 6524, 6524, 6524,
- 6524, 6524, 6524, 6524, 6524, 6524, 6524, 6524,
- 1242, 1242, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 6525, 6526, 6527, 6528, 6529, 6530, 6531,
- 6532, 6533, 6534, 6535, 6536, 6537, 6538, 6539,
- 6540, 6541, 6542, 6543, 6544, 6545, 6546, 6547,
- 6548, 6549, 6550, 6551, 6552, 6553, 6554, 6555,
- 6556, 6557, 6558, 6559, 6560, 6561, 6562, 6563,
- 6564, 6565, 6566, 6567, 6568, 6569, 6570, 6571,
- 6572, 6573, 6574, 6575, 6576, 6577, 6578, 6579,
- 6580, 6581, 6582, 6583, 6584, 6585, 6586, 6587,
- 6588, 6589, 6590, 6591, 6592, 6593, 6594, 6595,
- 6596, 6597, 6598, 6599, 6600, 6601, 6602, 6603,
- 6604, 6605, 6606, 6607, 6608, 6609, 0, 6610,
- 6611, 6612, 6613, 6614, 6615, 6616, 6617, 6618,
- 6619, 6620, 6621, 6622, 6623, 6624, 6625, 6626,
- 6627, 6628, 6629, 6630, 6631, 6632, 6633, 6634,
- 6635, 6636, 6637, 6638, 6639, 6640, 6641, 6642,
- 6643, 6644, 6645, 6646, 6647, 6648, 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, 6677, 6678, 6679, 6680, 0, 6681,
- 6682, 0, 0, 6683, 0, 0, 6684, 6685,
- 0, 0, 6686, 6687, 6688, 6689, 0, 6690,
- 6691, 6692, 6693, 6694, 6695, 6696, 6697, 6698,
- 6699, 6700, 6701, 0, 6702, 0, 6703, 6704,
- 6705, 6706, 6707, 6708, 6709, 0, 6710, 6711,
- 6712, 6713, 6714, 6715, 6716, 6717, 6718, 6719,
- 6720, 6721, 6722, 6723, 6724, 6725, 6726, 6727,
- 6728, 6729, 6730, 6731, 6732, 6733, 6734, 6735,
- 6736, 6737, 6738, 6739, 6740, 6741, 6742, 6743,
- 6744, 6745, 6746, 6747, 6748, 6749, 6750, 6751,
- 6752, 6753, 6754, 6755, 6756, 6757, 6758, 6759,
- 6760, 6761, 6762, 6763, 6764, 6765, 6766, 6767,
- 6768, 6769, 6770, 6771, 6772, 6773, 6774, 0,
- 6775, 6776, 6777, 6778, 0, 0, 6779, 6780,
- 6781, 6782, 6783, 6784, 6785, 6786, 0, 6787,
- 6788, 6789, 6790, 6791, 6792, 6793, 0, 6794,
- 6795, 6796, 6797, 6798, 6799, 6800, 6801, 6802,
- 6803, 6804, 6805, 6806, 6807, 6808, 6809, 6810,
- 6811, 6812, 6813, 6814, 6815, 6816, 6817, 6818,
- 6819, 6820, 6821, 0, 6822, 6823, 6824, 6825,
- 0, 6826, 6827, 6828, 6829, 6830, 0, 6831,
- 0, 0, 0, 6832, 6833, 6834, 6835, 6836,
- 6837, 6838, 0, 6839, 6840, 6841, 6842, 6843,
- 6844, 6845, 6846, 6847, 6848, 6849, 6850, 6851,
- 6852, 6853, 6854, 6855, 6856, 6857, 6858, 6859,
- 6860, 6861, 6862, 6863, 6864, 6865, 6866, 6867,
- 6868, 6869, 6870, 6871, 6872, 6873, 6874, 6875,
- 6876, 6877, 6878, 6879, 6880, 6881, 6882, 6883,
- 6884, 6885, 6886, 6887, 6888, 6889, 6890, 6891,
- 6892, 6893, 6894, 6895, 6896, 6897, 6898, 6899,
- 6900, 6901, 6902, 6903, 6904, 6905, 6906, 6907,
- 6908, 6909, 6910, 6911, 6912, 6913, 6914, 6915,
- 6916, 6917, 6918, 6919, 6920, 6921, 6922, 6923,
- 6924, 6925, 6926, 6927, 6928, 6929, 6930, 6931,
- 6932, 6933, 6934, 6935, 6936, 6937, 6938, 6939,
- 6940, 6941, 6942, 6943, 6944, 6945, 6946, 6947,
- 6948, 6949, 6950, 6951, 6952, 6953, 6954, 6955,
- 6956, 6957, 6958, 6959, 6960, 6961, 6962, 6963,
- 6964, 6965, 6966, 6967, 6968, 6969, 6970, 6971,
- 6972, 6973, 6974, 6975, 6976, 6977, 6978, 6979,
- 6980, 6981, 6982, 6983, 6984, 6985, 6986, 6987,
- 6988, 6989, 6990, 6991, 6992, 6993, 6994, 6995,
- 6996, 6997, 6998, 6999, 7000, 7001, 7002, 7003,
- 7004, 7005, 7006, 7007, 7008, 7009, 7010, 7011,
- 7012, 7013, 7014, 7015, 7016, 7017, 7018, 7019,
- 7020, 7021, 7022, 7023, 7024, 7025, 7026, 7027,
- 7028, 7029, 7030, 7031, 7032, 7033, 7034, 7035,
- 7036, 7037, 7038, 7039, 7040, 7041, 7042, 7043,
- 7044, 7045, 7046, 7047, 7048, 7049, 7050, 7051,
- 7052, 7053, 7054, 7055, 7056, 7057, 7058, 7059,
- 7060, 7061, 7062, 7063, 7064, 7065, 7066, 7067,
- 7068, 7069, 7070, 7071, 7072, 7073, 7074, 7075,
- 7076, 7077, 7078, 7079, 7080, 7081, 7082, 7083,
- 7084, 7085, 7086, 7087, 7088, 7089, 7090, 7091,
- 7092, 7093, 7094, 7095, 7096, 7097, 7098, 7099,
- 7100, 7101, 7102, 7103, 7104, 7105, 7106, 7107,
- 7108, 7109, 7110, 7111, 7112, 7113, 7114, 7115,
- 7116, 7117, 7118, 7119, 7120, 7121, 7122, 7123,
- 7124, 7125, 7126, 7127, 7128, 7129, 7130, 7131,
- 7132, 7133, 7134, 7135, 7136, 7137, 7138, 7139,
- 7140, 7141, 7142, 7143, 7144, 7145, 7146, 7147,
- 7148, 7149, 7150, 7151, 7152, 7153, 7154, 7155,
- 7156, 7157, 7158, 7159, 7160, 7161, 7162, 7163,
- 7164, 7165, 7166, 7167, 7168, 7169, 7170, 7171,
- 7172, 7173, 7174, 7175, 7176, 7177, 7178, 0,
- 0, 7179, 7180, 7181, 7182, 7183, 7184, 7185,
+ 0, 6579, 6580, 6581, 6582, 6583, 6584, 6585,
+ 6586, 6587, 6588, 6589, 6590, 6591, 6592, 6593,
+ 6594, 6595, 6596, 6597, 6598, 6599, 6600, 6601,
+ 6602, 6603, 6604, 6605, 6606, 6607, 6608, 6609,
+ 6610, 6611, 6612, 6613, 6614, 6615, 6616, 6617,
+ 6618, 6619, 6620, 6621, 6622, 6623, 6624, 6625,
+ 6626, 6627, 6628, 6629, 6630, 6631, 6632, 6633,
+ 6634, 6635, 6636, 6637, 6638, 6639, 6640, 6641,
+ 6642, 6643, 6644, 6645, 6646, 6647, 6648, 6649,
+ 6650, 6651, 6652, 6653, 6654, 6655, 6656, 6657,
+ 6658, 6659, 6660, 6661, 6662, 6663, 0, 6664,
+ 6665, 6666, 6667, 6668, 6669, 6670, 6671, 6672,
+ 6673, 6674, 6675, 6676, 6677, 6678, 6679, 6680,
+ 6681, 6682, 6683, 6684, 6685, 6686, 6687, 6688,
+ 6689, 6690, 6691, 6692, 6693, 6694, 6695, 6696,
+ 6697, 6698, 6699, 6700, 6701, 6702, 6703, 6704,
+ 6705, 6706, 6707, 6708, 6709, 6710, 6711, 6712,
+ 6713, 6714, 6715, 6716, 6717, 6718, 6719, 6720,
+ 6721, 6722, 6723, 6724, 6725, 6726, 6727, 6728,
+ 6729, 6730, 6731, 6732, 6733, 6734, 0, 6735,
+ 6736, 0, 0, 6737, 0, 0, 6738, 6739,
+ 0, 0, 6740, 6741, 6742, 6743, 0, 6744,
+ 6745, 6746, 6747, 6748, 6749, 6750, 6751, 6752,
+ 6753, 6754, 6755, 0, 6756, 0, 6757, 6758,
+ 6759, 6760, 6761, 6762, 6763, 0, 6764, 6765,
+ 6766, 6767, 6768, 6769, 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, 6800, 6801, 6802, 6803, 6804, 6805,
+ 6806, 6807, 6808, 6809, 6810, 6811, 6812, 6813,
+ 6814, 6815, 6816, 6817, 6818, 6819, 6820, 6821,
+ 6822, 6823, 6824, 6825, 6826, 6827, 6828, 0,
+ 6829, 6830, 6831, 6832, 0, 0, 6833, 6834,
+ 6835, 6836, 6837, 6838, 6839, 6840, 0, 6841,
+ 6842, 6843, 6844, 6845, 6846, 6847, 0, 6848,
+ 6849, 6850, 6851, 6852, 6853, 6854, 6855, 6856,
+ 6857, 6858, 6859, 6860, 6861, 6862, 6863, 6864,
+ 6865, 6866, 6867, 6868, 6869, 6870, 6871, 6872,
+ 6873, 6874, 6875, 0, 6876, 6877, 6878, 6879,
+ 0, 6880, 6881, 6882, 6883, 6884, 0, 6885,
+ 0, 0, 0, 6886, 6887, 6888, 6889, 6890,
+ 6891, 6892, 0, 6893, 6894, 6895, 6896, 6897,
+ 6898, 6899, 6900, 6901, 6902, 6903, 6904, 6905,
+ 6906, 6907, 6908, 6909, 6910, 6911, 6912, 6913,
+ 6914, 6915, 6916, 6917, 6918, 6919, 6920, 6921,
+ 6922, 6923, 6924, 6925, 6926, 6927, 6928, 6929,
+ 6930, 6931, 6932, 6933, 6934, 6935, 6936, 6937,
+ 6938, 6939, 6940, 6941, 6942, 6943, 6944, 6945,
+ 6946, 6947, 6948, 6949, 6950, 6951, 6952, 6953,
+ 6954, 6955, 6956, 6957, 6958, 6959, 6960, 6961,
+ 6962, 6963, 6964, 6965, 6966, 6967, 6968, 6969,
+ 6970, 6971, 6972, 6973, 6974, 6975, 6976, 6977,
+ 6978, 6979, 6980, 6981, 6982, 6983, 6984, 6985,
+ 6986, 6987, 6988, 6989, 6990, 6991, 6992, 6993,
+ 6994, 6995, 6996, 6997, 6998, 6999, 7000, 7001,
+ 7002, 7003, 7004, 7005, 7006, 7007, 7008, 7009,
+ 7010, 7011, 7012, 7013, 7014, 7015, 7016, 7017,
+ 7018, 7019, 7020, 7021, 7022, 7023, 7024, 7025,
+ 7026, 7027, 7028, 7029, 7030, 7031, 7032, 7033,
+ 7034, 7035, 7036, 7037, 7038, 7039, 7040, 7041,
+ 7042, 7043, 7044, 7045, 7046, 7047, 7048, 7049,
+ 7050, 7051, 7052, 7053, 7054, 7055, 7056, 7057,
+ 7058, 7059, 7060, 7061, 7062, 7063, 7064, 7065,
+ 7066, 7067, 7068, 7069, 7070, 7071, 7072, 7073,
+ 7074, 7075, 7076, 7077, 7078, 7079, 7080, 7081,
+ 7082, 7083, 7084, 7085, 7086, 7087, 7088, 7089,
+ 7090, 7091, 7092, 7093, 7094, 7095, 7096, 7097,
+ 7098, 7099, 7100, 7101, 7102, 7103, 7104, 7105,
+ 7106, 7107, 7108, 7109, 7110, 7111, 7112, 7113,
+ 7114, 7115, 7116, 7117, 7118, 7119, 7120, 7121,
+ 7122, 7123, 7124, 7125, 7126, 7127, 7128, 7129,
+ 7130, 7131, 7132, 7133, 7134, 7135, 7136, 7137,
+ 7138, 7139, 7140, 7141, 7142, 7143, 7144, 7145,
+ 7146, 7147, 7148, 7149, 7150, 7151, 7152, 7153,
+ 7154, 7155, 7156, 7157, 7158, 7159, 7160, 7161,
+ 7162, 7163, 7164, 7165, 7166, 7167, 7168, 7169,
+ 7170, 7171, 7172, 7173, 7174, 7175, 7176, 7177,
+ 7178, 7179, 7180, 7181, 7182, 7183, 7184, 7185,
7186, 7187, 7188, 7189, 7190, 7191, 7192, 7193,
7194, 7195, 7196, 7197, 7198, 7199, 7200, 7201,
7202, 7203, 7204, 7205, 7206, 7207, 7208, 7209,
7210, 7211, 7212, 7213, 7214, 7215, 7216, 7217,
7218, 7219, 7220, 7221, 7222, 7223, 7224, 7225,
- 7226, 7227, 7228, 7229, 7230, 7231, 7232, 7233,
- 7234, 7235, 7236, 7237, 7238, 7239, 7240, 7241,
- 7242, 7243, 7244, 7245, 7246, 7247, 7248, 7249,
- 7250, 7251, 7252, 7253, 7254, 7255, 7256, 7257,
- 7258, 7259, 7260, 7261, 7204, 7262, 7263, 7264,
- 7265, 7266, 7267, 7268, 7269, 7270, 7271, 7272,
- 7273, 7274, 7275, 7276, 7277, 7278, 7279, 7280,
- 7281, 7282, 7283, 7284, 7285, 7286, 7230, 7287,
+ 7226, 7227, 7228, 7229, 7230, 7231, 7232, 0,
+ 0, 7233, 7234, 7235, 7236, 7237, 7238, 7239,
+ 7240, 7241, 7242, 7243, 7244, 7245, 7246, 7247,
+ 7248, 7249, 7250, 7251, 7252, 7253, 7254, 7255,
+ 7256, 7257, 7258, 7259, 7260, 7261, 7262, 7263,
+ 7264, 7265, 7266, 7267, 7268, 7269, 7270, 7271,
+ 7272, 7273, 7274, 7275, 7276, 7277, 7278, 7279,
+ 7280, 7281, 7282, 7283, 7284, 7285, 7286, 7287,
7288, 7289, 7290, 7291, 7292, 7293, 7294, 7295,
7296, 7297, 7298, 7299, 7300, 7301, 7302, 7303,
7304, 7305, 7306, 7307, 7308, 7309, 7310, 7311,
- 7312, 7313, 7314, 7315, 7316, 7317, 7204, 7318,
+ 7312, 7313, 7314, 7315, 7258, 7316, 7317, 7318,
7319, 7320, 7321, 7322, 7323, 7324, 7325, 7326,
7327, 7328, 7329, 7330, 7331, 7332, 7333, 7334,
- 7335, 7336, 7337, 7338, 7339, 7340, 7341, 7342,
- 7230, 7343, 7344, 7345, 7346, 7347, 7348, 7349,
+ 7335, 7336, 7337, 7338, 7339, 7340, 7284, 7341,
+ 7342, 7343, 7344, 7345, 7346, 7347, 7348, 7349,
7350, 7351, 7352, 7353, 7354, 7355, 7356, 7357,
7358, 7359, 7360, 7361, 7362, 7363, 7364, 7365,
- 7366, 7367, 7368, 7369, 7370, 7371, 7372, 7373,
- 7204, 7374, 7375, 7376, 7377, 7378, 7379, 7380,
+ 7366, 7367, 7368, 7369, 7370, 7371, 7258, 7372,
+ 7373, 7374, 7375, 7376, 7377, 7378, 7379, 7380,
7381, 7382, 7383, 7384, 7385, 7386, 7387, 7388,
7389, 7390, 7391, 7392, 7393, 7394, 7395, 7396,
- 7397, 7398, 7230, 7399, 7400, 7401, 7402, 7403,
+ 7284, 7397, 7398, 7399, 7400, 7401, 7402, 7403,
7404, 7405, 7406, 7407, 7408, 7409, 7410, 7411,
7412, 7413, 7414, 7415, 7416, 7417, 7418, 7419,
7420, 7421, 7422, 7423, 7424, 7425, 7426, 7427,
- 7428, 7429, 7204, 7430, 7431, 7432, 7433, 7434,
+ 7258, 7428, 7429, 7430, 7431, 7432, 7433, 7434,
7435, 7436, 7437, 7438, 7439, 7440, 7441, 7442,
7443, 7444, 7445, 7446, 7447, 7448, 7449, 7450,
- 7451, 7452, 7453, 7454, 7230, 7455, 7456, 7457,
- 7458, 7459, 7460, 7461, 7462, 0, 0, 6499,
- 6500, 6501, 6502, 6503, 6504, 6505, 6506, 6507,
- 6508, 6499, 6500, 6501, 6502, 6503, 6504, 6505,
- 6506, 6507, 6508, 6499, 6500, 6501, 6502, 6503,
- 6504, 6505, 6506, 6507, 6508, 6499, 6500, 6501,
- 6502, 6503, 6504, 6505, 6506, 6507, 6508, 6499,
- 6500, 6501, 6502, 6503, 6504, 6505, 6506, 6507,
- 6508, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 897, 897, 897, 897, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 897, 897,
- 897, 897, 897, 897, 897, 897, 1210, 897,
- 897, 897, 897, 897, 897, 897, 897, 897,
- 897, 897, 897, 897, 897, 1210, 897, 897,
- 1104, 1104, 1104, 1104, 1104, 0, 0, 0,
+ 7451, 7452, 7284, 7453, 7454, 7455, 7456, 7457,
+ 7458, 7459, 7460, 7461, 7462, 7463, 7464, 7465,
+ 7466, 7467, 7468, 7469, 7470, 7471, 7472, 7473,
+ 7474, 7475, 7476, 7477, 7478, 7479, 7480, 7481,
+ 7482, 7483, 7258, 7484, 7485, 7486, 7487, 7488,
+ 7489, 7490, 7491, 7492, 7493, 7494, 7495, 7496,
+ 7497, 7498, 7499, 7500, 7501, 7502, 7503, 7504,
+ 7505, 7506, 7507, 7508, 7284, 7509, 7510, 7511,
+ 7512, 7513, 7514, 7515, 7516, 0, 0, 6553,
+ 6554, 6555, 6556, 6557, 6558, 6559, 6560, 6561,
+ 6562, 6553, 6554, 6555, 6556, 6557, 6558, 6559,
+ 6560, 6561, 6562, 6553, 6554, 6555, 6556, 6557,
+ 6558, 6559, 6560, 6561, 6562, 6553, 6554, 6555,
+ 6556, 6557, 6558, 6559, 6560, 6561, 6562, 6553,
+ 6554, 6555, 6556, 6557, 6558, 6559, 6560, 6561,
+ 6562, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 896, 896, 896, 896, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 896, 896,
+ 896, 896, 896, 896, 896, 896, 1209, 896,
+ 896, 896, 896, 896, 896, 896, 896, 896,
+ 896, 896, 896, 896, 896, 1209, 896, 896,
+ 1103, 1103, 1103, 1103, 1103, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1210, 1210, 1210, 1210,
- 1210, 0, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
- 1210, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1209, 1209, 1209, 1209,
+ 1209, 0, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -6764,12 +6745,12 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 7463, 7464, 7465, 7466, 7467, 7468, 7469,
- 7470, 7471, 7472, 349, 7473, 7474, 7475, 7476,
- 7477, 7478, 7479, 7480, 7481, 7482, 7483, 7484,
- 7485, 7486, 7487, 7488, 7489, 7490, 7491, 7492,
- 0, 0, 0, 0, 0, 0, 7493, 7494,
- 7495, 7496, 7497, 7498, 0, 0, 0, 0,
+ 0, 7517, 7518, 7519, 7520, 7521, 7522, 7523,
+ 7524, 7525, 7526, 349, 7527, 7528, 7529, 7530,
+ 7531, 7532, 7533, 7534, 7535, 7536, 7537, 7538,
+ 7539, 7540, 7541, 7542, 7543, 7544, 7545, 7546,
+ 0, 0, 0, 0, 0, 0, 7547, 7548,
+ 7549, 7550, 7551, 7552, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -6796,25 +6777,25 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 898, 898, 898, 898, 898, 898, 898,
- 0, 898, 898, 898, 898, 898, 898, 898,
- 898, 898, 898, 898, 898, 898, 898, 898,
- 898, 898, 0, 0, 898, 898, 898, 898,
- 898, 898, 898, 0, 898, 898, 0, 898,
- 898, 898, 898, 898, 0, 0, 0, 0,
- 0, 7499, 7500, 7501, 7502, 7503, 7504, 7505,
- 7506, 7507, 7508, 7509, 7510, 7511, 7512, 7513,
- 7514, 7515, 7516, 7517, 7518, 7519, 7520, 7521,
- 7522, 7523, 7524, 7525, 7526, 7527, 7528, 7529,
- 7530, 7531, 7532, 7533, 7534, 7535, 7536, 7537,
- 7538, 7539, 7540, 7541, 7542, 7543, 7544, 7545,
- 7546, 7547, 7548, 7549, 7550, 7551, 7552, 7553,
- 7554, 7555, 7556, 7557, 7558, 7559, 7560, 0,
+ 0, 897, 897, 897, 897, 897, 897, 897,
+ 0, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 897, 897, 897, 897, 897, 897,
+ 897, 897, 0, 0, 897, 897, 897, 897,
+ 897, 897, 897, 0, 897, 897, 0, 897,
+ 897, 897, 897, 897, 0, 0, 0, 0,
+ 0, 7553, 7554, 7555, 7556, 7557, 7558, 7559,
+ 7560, 7561, 7562, 7563, 7564, 7565, 7566, 7567,
+ 7568, 7569, 7570, 7571, 7572, 7573, 7574, 7575,
+ 7576, 7577, 7578, 7579, 7580, 7581, 7582, 7583,
+ 7584, 7585, 7586, 7587, 7588, 7589, 7590, 7591,
+ 7592, 7593, 7594, 7595, 7596, 7597, 7598, 7599,
+ 7600, 7601, 7602, 7603, 7604, 7605, 7606, 7607,
+ 7608, 7609, 7610, 7611, 7612, 7613, 7614, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 898, 0, 0, 0, 0, 0, 0, 0,
+ 897, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -6834,11 +6815,11 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 0, 0,
- 0, 898, 898, 898, 898, 898, 898, 898,
- 599, 599, 599, 599, 599, 599, 599, 0,
- 0, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 349,
- 897, 0, 0, 0, 0, 0, 0, 0,
+ 0, 897, 897, 897, 897, 897, 897, 897,
+ 598, 598, 598, 598, 598, 598, 598, 0,
+ 0, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 349,
+ 896, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -6881,7 +6862,7 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 898,
+ 349, 349, 349, 349, 349, 349, 349, 897,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 349, 349, 349, 349, 349, 349, 349,
@@ -6889,9 +6870,9 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 898, 898, 898,
- 898, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 0,
+ 349, 349, 349, 349, 349, 897, 897, 897,
+ 897, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 0,
10, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -6921,9 +6902,9 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 599, 1785, 1785, 1147,
- 898, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 0, 0, 0, 0, 0,
+ 349, 349, 349, 349, 598, 1785, 1785, 1146,
+ 897, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -6953,10 +6934,42 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 349, 349, 349, 349, 349, 349, 349, 898,
- 1147, 349, 1233, 1233, 1233, 1233, 1233, 1233,
- 1233, 1233, 1233, 1233, 0, 0, 0, 0,
- 1104, 0, 0, 0, 0, 0, 0, 0,
+ 349, 349, 349, 349, 349, 349, 349, 897,
+ 1146, 349, 1232, 1232, 1232, 1232, 1232, 1232,
+ 1232, 1232, 1232, 1232, 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, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 349, 349, 349, 349, 349, 349, 349, 349,
+ 0, 349, 349, 349, 897, 349, 349, 897,
+ 349, 349, 349, 349, 349, 349, 349, 897,
+ 897, 349, 349, 349, 349, 349, 897, 0,
+ 0, 0, 0, 0, 0, 0, 0, 349,
+ 598, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -6988,51 +7001,51 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 349, 349, 349, 349, 0, 349, 349,
0, 349, 349, 349, 349, 349, 349, 349,
349, 349, 349, 349, 349, 349, 349, 349,
- 0, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
- 1168, 1168, 1168, 1168, 1168, 1168, 0, 0,
- 6139, 6139, 6139, 6139, 6139, 6139, 6139, 6139,
- 6139, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 7561, 7562, 7563, 7564, 7565, 7566, 7567,
- 7568, 7569, 7570, 7571, 7572, 7573, 7574, 7575,
- 7576, 7577, 7578, 7579, 7580, 7581, 7582, 7583,
- 7584, 7585, 7586, 7587, 7588, 7589, 7590, 7591,
- 7592, 7593, 7594, 7595, 7596, 7597, 7598, 7599,
- 7600, 7601, 7602, 7603, 7604, 7605, 7606, 7607,
- 7608, 7609, 7610, 7611, 7612, 7613, 7614, 7615,
- 7616, 7617, 7618, 7619, 7620, 7621, 7622, 7623,
- 7624, 7625, 7626, 7627, 7628, 898, 898, 898,
- 898, 898, 898, 1234, 1212, 0, 0, 0,
- 0, 1211, 1211, 1211, 1211, 1211, 1211, 1211,
- 1211, 1211, 1211, 0, 0, 0, 0, 1165,
- 1165, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+ 1167, 1167, 1167, 1167, 1167, 1167, 0, 0,
+ 6142, 6142, 6142, 6142, 6142, 6142, 6142, 6142,
+ 6142, 1146, 1146, 1146, 1146, 1146, 1146, 1146,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 7615, 7616, 7617, 7618, 7619, 7620, 7621,
+ 7622, 7623, 7624, 7625, 7626, 7627, 7628, 7629,
+ 7630, 7631, 7632, 7633, 7634, 7635, 7636, 7637,
+ 7638, 7639, 7640, 7641, 7642, 7643, 7644, 7645,
+ 7646, 7647, 7648, 7649, 7650, 7651, 7652, 7653,
+ 7654, 7655, 7656, 7657, 7658, 7659, 7660, 7661,
+ 7662, 7663, 7664, 7665, 7666, 7667, 7668, 7669,
+ 7670, 7671, 7672, 7673, 7674, 7675, 7676, 7677,
+ 7678, 7679, 7680, 7681, 7682, 897, 897, 897,
+ 897, 897, 897, 1233, 1211, 0, 0, 0,
+ 0, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
+ 1210, 1210, 1210, 0, 0, 0, 0, 1164,
+ 1164, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -7066,15 +7079,15 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 6289, 6289, 6289, 6289, 6289, 6289,
- 6289, 6289, 6289, 6289, 6289, 6289, 6289, 6289,
- 6289, 6289, 6289, 6289, 6289, 6289, 6289, 6289,
- 6289, 6289, 6289, 6289, 6289, 6289, 6289, 6289,
- 6289, 6289, 6289, 6289, 6289, 6289, 6289, 6289,
- 6289, 6289, 6289, 6289, 6289, 6289, 6289, 6289,
- 6289, 6289, 6289, 6289, 6289, 6289, 6289, 6289,
- 6289, 6289, 6289, 6289, 6289, 1207, 6289, 6289,
- 6289, 1171, 6289, 6289, 6289, 6289, 0, 0,
+ 0, 0, 6293, 6293, 6293, 6293, 6293, 6293,
+ 6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293,
+ 6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293,
+ 6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293,
+ 6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293,
+ 6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293,
+ 6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293,
+ 6293, 6293, 6293, 6293, 6293, 1206, 6293, 6293,
+ 6293, 1170, 6293, 6293, 6293, 6293, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -7084,14 +7097,14 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 6289, 6289, 6289, 6289, 6289, 6289,
- 6289, 6289, 6289, 6289, 6289, 6289, 6289, 6289,
- 6289, 6289, 6289, 6289, 6289, 6289, 6289, 6289,
- 6289, 6289, 6289, 6289, 6289, 6289, 6289, 6289,
- 6289, 6289, 6289, 6289, 6289, 6289, 6289, 6289,
- 6289, 6289, 6289, 6289, 6289, 6289, 6289, 1207,
- 6289, 6289, 6289, 6289, 6289, 6289, 6289, 6289,
- 6289, 6289, 6289, 6289, 6289, 6289, 6289, 0,
+ 0, 0, 6293, 6293, 6293, 6293, 6293, 6293,
+ 6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293,
+ 6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293,
+ 6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293,
+ 6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293,
+ 6293, 6293, 6293, 6293, 6293, 6293, 6293, 1206,
+ 6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293,
+ 6293, 6293, 6293, 6293, 6293, 6293, 6293, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -7116,30 +7129,30 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 7629, 7630, 7631, 7632, 0, 7633, 7634,
- 7635, 7636, 7637, 7638, 7639, 7640, 7641, 7642,
- 7643, 7644, 7645, 7646, 7647, 7648, 7649, 7650,
- 7651, 7652, 7653, 7654, 7655, 7656, 7657, 7658,
- 7659, 0, 7630, 7631, 0, 7660, 0, 0,
- 7635, 0, 7637, 7638, 7639, 7640, 7641, 7642,
- 7643, 7644, 7645, 7646, 0, 7648, 7649, 7650,
- 7651, 0, 7653, 0, 7655, 0, 0, 0,
- 0, 0, 0, 7631, 0, 0, 0, 0,
- 7635, 0, 7637, 0, 7639, 0, 7641, 7642,
- 7643, 0, 7645, 7646, 0, 7648, 0, 0,
- 7651, 0, 7653, 0, 7655, 0, 7657, 0,
- 7659, 0, 7630, 7631, 0, 7660, 0, 0,
- 7635, 7636, 7637, 7638, 0, 7640, 7641, 7642,
- 7643, 7644, 7645, 7646, 0, 7648, 7649, 7650,
- 7651, 0, 7653, 7654, 7655, 7656, 0, 7658,
- 0, 7629, 7630, 7631, 7632, 7660, 7633, 7634,
- 7635, 7636, 7637, 0, 7639, 7640, 7641, 7642,
- 7643, 7644, 7645, 7646, 7647, 7648, 7649, 7650,
- 7651, 7652, 7653, 7654, 7655, 0, 0, 0,
- 0, 0, 7630, 7631, 7632, 0, 7633, 7634,
- 7635, 7636, 7637, 0, 7639, 7640, 7641, 7642,
- 7643, 7644, 7645, 7646, 7647, 7648, 7649, 7650,
- 7651, 7652, 7653, 7654, 7655, 0, 0, 0,
+ 0, 7683, 7684, 7685, 7686, 0, 7687, 7688,
+ 7689, 7690, 7691, 7692, 7693, 7694, 7695, 7696,
+ 7697, 7698, 7699, 7700, 7701, 7702, 7703, 7704,
+ 7705, 7706, 7707, 7708, 7709, 7710, 7711, 7712,
+ 7713, 0, 7684, 7685, 0, 7714, 0, 0,
+ 7689, 0, 7691, 7692, 7693, 7694, 7695, 7696,
+ 7697, 7698, 7699, 7700, 0, 7702, 7703, 7704,
+ 7705, 0, 7707, 0, 7709, 0, 0, 0,
+ 0, 0, 0, 7685, 0, 0, 0, 0,
+ 7689, 0, 7691, 0, 7693, 0, 7695, 7696,
+ 7697, 0, 7699, 7700, 0, 7702, 0, 0,
+ 7705, 0, 7707, 0, 7709, 0, 7711, 0,
+ 7713, 0, 7684, 7685, 0, 7714, 0, 0,
+ 7689, 7690, 7691, 7692, 0, 7694, 7695, 7696,
+ 7697, 7698, 7699, 7700, 0, 7702, 7703, 7704,
+ 7705, 0, 7707, 7708, 7709, 7710, 0, 7712,
+ 0, 7683, 7684, 7685, 7686, 7714, 7687, 7688,
+ 7689, 7690, 7691, 0, 7693, 7694, 7695, 7696,
+ 7697, 7698, 7699, 7700, 7701, 7702, 7703, 7704,
+ 7705, 7706, 7707, 7708, 7709, 0, 0, 0,
+ 0, 0, 7684, 7685, 7686, 0, 7687, 7688,
+ 7689, 7690, 7691, 0, 7693, 7694, 7695, 7696,
+ 7697, 7698, 7699, 7700, 7701, 7702, 7703, 7704,
+ 7705, 7706, 7707, 7708, 7709, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -7148,83 +7161,83 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 74, 74, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 80, 80, 80, 80, 2564, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 0, 0, 0,
- 0, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 0, 0, 0,
+ 0, 78, 78, 78, 78, 2564, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 0, 0, 0,
+ 0, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 0, 0, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 0, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 2564, 0, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 7661, 7662, 7663, 7664, 7665, 7666, 7667,
- 7668, 7669, 7670, 7671, 1268, 1268, 80, 80,
- 80, 7672, 7673, 7674, 7675, 7676, 7677, 7678,
- 7679, 7680, 7681, 7682, 7683, 7684, 7685, 7686,
- 7687, 7688, 7689, 7690, 7691, 7692, 7693, 7694,
- 7695, 7696, 7697, 7698, 7699, 7700, 7701, 7702,
- 80, 7703, 7704, 7705, 7706, 7707, 7708, 7709,
- 7710, 7711, 7712, 7713, 7714, 7715, 7716, 7717,
- 7718, 7719, 7720, 7721, 7722, 7723, 7724, 7725,
- 7726, 7727, 7728, 7729, 7730, 7731, 7732, 7733,
- 7734, 7735, 7736, 7737, 7738, 7739, 7740, 7741,
- 7742, 7743, 7744, 7745, 7746, 7747, 7748, 7749,
- 7750, 7751, 7752, 7753, 7754, 7755, 7756, 7757,
- 7758, 7759, 7760, 7761, 7762, 7763, 80, 80,
- 80, 7764, 7765, 7766, 7767, 7768, 7769, 7770,
- 7771, 7772, 7773, 7774, 7775, 7776, 7777, 7778,
- 7779, 7780, 7781, 7782, 7783, 7784, 7785, 7786,
- 7787, 7788, 7789, 7790, 7790, 7790, 7790, 7791,
- 7790, 7792, 7791, 7791, 7791, 7791, 7791, 7791,
- 7791, 7791, 7791, 7791, 7790, 7790, 7790, 7790,
- 7790, 7790, 7790, 7790, 7790, 7790, 7790, 7790,
- 7790, 7790, 7790, 7790, 7790, 7790, 80, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 7793,
- 7793, 7793, 7793, 7793, 7793, 7793, 7793, 7793,
- 7793, 7793, 7793, 7793, 7793, 7793, 7793, 7793,
- 7793, 7793, 7793, 7793, 7793, 7793, 7793, 7793,
- 7793, 7794, 7795, 7796, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 7797, 7798, 7799, 7800, 7801, 7802, 7803,
+ 0, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 0, 0, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 0, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 2564, 0, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 7715, 7716, 7717, 7718, 7719, 7720, 7721,
+ 7722, 7723, 7724, 7725, 1267, 1267, 78, 78,
+ 78, 7726, 7727, 7728, 7729, 7730, 7731, 7732,
+ 7733, 7734, 7735, 7736, 7737, 7738, 7739, 7740,
+ 7741, 7742, 7743, 7744, 7745, 7746, 7747, 7748,
+ 7749, 7750, 7751, 7752, 7753, 7754, 7755, 7756,
+ 78, 7757, 7758, 7759, 7760, 7761, 7762, 7763,
+ 7764, 7765, 7766, 7767, 7768, 7769, 7770, 7771,
+ 7772, 7773, 7774, 7775, 7776, 7777, 7778, 7779,
+ 7780, 7781, 7782, 7783, 7784, 7785, 7786, 7787,
+ 7788, 7789, 7790, 7791, 7792, 7793, 7794, 7795,
+ 7796, 7797, 7798, 7799, 7800, 7801, 7802, 7803,
7804, 7805, 7806, 7807, 7808, 7809, 7810, 7811,
- 7812, 7813, 7814, 7815, 7816, 7817, 7818, 7819,
- 7820, 7821, 7822, 7823, 7824, 7825, 7826, 7827,
- 7828, 7829, 7830, 7831, 7832, 7833, 7834, 7835,
- 7836, 7837, 7838, 7839, 7840, 0, 0, 0,
- 0, 7841, 7842, 7843, 7844, 7845, 7846, 7847,
- 7848, 7849, 0, 0, 0, 0, 0, 0,
- 0, 7850, 7851, 0, 0, 0, 0, 0,
+ 7812, 7813, 7814, 7815, 7816, 7817, 78, 78,
+ 78, 7818, 7819, 7820, 7821, 7822, 7823, 7824,
+ 7825, 7826, 7827, 7828, 7829, 7830, 7831, 7832,
+ 7833, 7834, 7835, 7836, 7837, 7838, 7839, 7840,
+ 7841, 7842, 7843, 7844, 7844, 7844, 7844, 7845,
+ 7844, 7846, 7845, 7845, 7845, 7845, 7845, 7845,
+ 7845, 7845, 7845, 7845, 7844, 7844, 7844, 7844,
+ 7844, 7844, 7844, 7844, 7844, 7844, 7844, 7844,
+ 7844, 7844, 7844, 7844, 7844, 7844, 78, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2564, 2564, 2564, 2564, 2564, 2564, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 7847,
+ 7847, 7847, 7847, 7847, 7847, 7847, 7847, 7847,
+ 7847, 7847, 7847, 7847, 7847, 7847, 7847, 7847,
+ 7847, 7847, 7847, 7847, 7847, 7847, 7847, 7847,
+ 7847, 7848, 7849, 7850, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 7851, 7852, 7853, 7854, 7855, 7856, 7857,
+ 7858, 7859, 7860, 7861, 7862, 7863, 7864, 7865,
+ 7866, 7867, 7868, 7869, 7870, 7871, 7872, 7873,
+ 7874, 7875, 7876, 7877, 7878, 7879, 7880, 7881,
+ 7882, 7883, 7884, 7885, 7886, 7887, 7888, 7889,
+ 7890, 7891, 7892, 7893, 7894, 0, 0, 0,
+ 0, 7895, 7896, 7897, 7898, 7899, 7900, 7901,
+ 7902, 7903, 0, 0, 0, 0, 0, 0,
+ 0, 7904, 7905, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2709, 2709, 2709, 2709, 2709, 2709, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -7248,7 +7261,7 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
- 2564, 2564, 80, 80, 80, 80, 80, 80,
+ 2564, 2564, 80, 78, 78, 80, 80, 80,
80, 80, 80, 80, 80, 80, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 80,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
@@ -7262,8 +7275,8 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
2564, 2564, 2564, 2564, 2564, 2564, 80, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
- 2564, 2564, 2564, 2564, 2564, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
+ 2564, 2564, 2564, 2564, 2564, 78, 78, 80,
+ 80, 78, 80, 80, 80, 78, 78, 80,
80, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
@@ -7274,9 +7287,9 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
80, 80, 80, 80, 80, 80, 80, 80,
80, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
- 2564, 2564, 80, 80, 80, 2564, 80, 80,
- 80, 2564, 2564, 2564, 7852, 7852, 7852, 7852,
- 7852, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 78, 78, 80, 2564, 80, 78,
+ 80, 2564, 2564, 2564, 7906, 7906, 7906, 7906,
+ 7906, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
@@ -7307,7 +7320,7 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
- 2564, 2564, 2564, 2564, 2564, 2564, 80, 80,
+ 2564, 2564, 2564, 2564, 2564, 2564, 80, 78,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
@@ -7316,30 +7329,30 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 78,
- 78, 78, 78, 78, 78, 78, 78, 80,
- 80, 80, 80, 80, 2564, 2564, 2564, 2564,
- 80, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 80, 80, 2564, 2564, 2564, 2564,
+ 78, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
- 2564, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 2564, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 2564, 2564,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 2564, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 2564, 2564, 2564, 2564,
+ 2564, 78, 78, 78, 78, 78, 78, 78,
+ 80, 80, 78, 78, 80, 80, 80, 80,
+ 80, 80, 80, 2564, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 80, 78, 78, 80, 80, 80, 80, 78,
+ 78, 80, 78, 78, 78, 78, 2564, 2564,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 2564, 80, 78,
+ 78, 80, 78, 78, 78, 78, 78, 78,
+ 78, 78, 80, 80, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 80, 78, 78,
+ 78, 78, 78, 80, 80, 80, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 80, 80, 80, 78, 78, 78,
+ 78, 78, 78, 78, 78, 80, 80, 80,
+ 78, 78, 80, 78, 80, 78, 78, 78,
+ 78, 80, 78, 78, 78, 78, 78, 78,
+ 80, 78, 78, 78, 80, 78, 78, 78,
+ 78, 78, 78, 80, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
@@ -7364,13 +7377,13 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
- 2564, 2564, 2564, 2564, 2564, 2564, 2564, 80,
- 80, 80, 80, 80, 80, 2564, 80, 80,
- 80, 2564, 2564, 2564, 80, 80, 2564, 2564,
- 2564, 0, 0, 0, 0, 2564, 2564, 2564,
- 2564, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 2564, 2564, 0, 0,
- 0, 80, 80, 80, 80, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 78,
+ 78, 78, 78, 78, 80, 2564, 80, 80,
+ 80, 2564, 2564, 2564, 78, 78, 2564, 2564,
+ 2564, 2564, 0, 0, 0, 2564, 2564, 2564,
+ 2564, 80, 80, 80, 80, 80, 80, 78,
+ 78, 78, 80, 78, 2564, 2564, 0, 0,
+ 0, 80, 78, 78, 80, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 0, 0,
0, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
@@ -7386,9 +7399,6 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 80, 80, 80,
- 0, 0, 0, 0, 80, 80, 80, 80,
- 80, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
@@ -7398,8 +7408,11 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
- 78, 78, 78, 78, 78, 78, 80, 80,
- 80, 80, 80, 0, 0, 0, 0, 0,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 0, 0, 0, 0, 0,
0, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 0, 0, 0,
0, 2564, 0, 0, 0, 0, 0, 0,
@@ -7426,12 +7439,12 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 0,
- 0, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 0, 0, 0,
- 0, 80, 80, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 0, 0, 0,
+ 0, 78, 78, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 74, 74, 74, 74, 74, 74, 74,
+ 74, 74, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -7468,24 +7481,24 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
- 2564, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 80, 80, 0,
+ 2564, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78,
+ 78, 0, 0, 0, 0, 0, 0, 0,
+ 0, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 0,
0, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 0, 0,
0, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
- 2564, 2564, 2564, 0, 0, 0, 0, 0,
+ 2564, 2564, 2564, 2564, 0, 0, 0, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
@@ -7493,12 +7506,12 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
- 0, 0, 0, 0, 0, 0, 0, 2564,
+ 0, 2564, 0, 0, 0, 0, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 2564, 2564, 2564, 2564, 0, 0,
2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
- 2564, 2564, 2564, 0, 0, 0, 0, 0,
- 0, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 0, 0, 0, 0,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
2564, 2564, 0, 0, 0, 0, 0, 0,
0, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
@@ -7530,268 +7543,246 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
78, 78, 78, 78, 78, 78, 78, 78,
- 78, 6499, 6500, 6501, 6502, 6503, 6504, 6505,
- 6506, 6507, 6508, 0, 0, 0, 0, 0,
- 0, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 0, 0, 0, 0, 0,
- 0, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 0,
- 0, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
+ 78, 6553, 6554, 6555, 6556, 6557, 6558, 6559,
+ 6560, 6561, 6562, 78, 0, 0, 0, 0,
+ 0, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 0,
+ 0, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 0,
+ 0, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 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, 7908, 7909, 7910, 7911, 4644, 7912,
+ 7913, 7914, 7915, 4645, 7916, 7917, 7918, 4646,
+ 7919, 7920, 7921, 7922, 7923, 7924, 7925, 7926,
+ 7927, 7928, 7929, 7930, 4704, 7931, 7932, 7933,
+ 7934, 7935, 7936, 7937, 7938, 7939, 4709, 4647,
+ 4648, 4710, 7940, 7941, 4455, 7942, 4649, 7943,
+ 7944, 7945, 7946, 7946, 7946, 7947, 7948, 7949,
+ 7950, 7951, 7952, 7953, 7954, 7955, 7956, 7957,
+ 7958, 7959, 7960, 7961, 7962, 7963, 7964, 7964,
+ 4712, 7965, 7966, 7967, 7968, 4651, 7969, 7970,
+ 7971, 4608, 7972, 7973, 7974, 7975, 7976, 7977,
+ 7978, 7979, 7980, 7981, 7982, 7983, 7984, 7985,
+ 7986, 7987, 7988, 7989, 7990, 7991, 7992, 7993,
+ 7994, 7995, 7996, 7997, 7997, 7998, 7999, 8000,
+ 4451, 8001, 8002, 8003, 8004, 8005, 8006, 8007,
+ 8008, 4656, 8009, 8010, 8011, 8012, 8013, 8014,
+ 8015, 8016, 8017, 8018, 8019, 8020, 8021, 8022,
+ 8023, 8024, 8025, 8026, 8027, 8028, 8029, 4397,
+ 8030, 8031, 8032, 8032, 8033, 8034, 8034, 8035,
+ 8036, 8037, 8038, 8039, 8040, 8041, 8042, 8043,
+ 8044, 8045, 8046, 8047, 4657, 8048, 8049, 8050,
+ 8051, 4724, 8051, 8052, 4659, 8053, 8054, 8055,
+ 8056, 4660, 4370, 8057, 8058, 8059, 8060, 8061,
+ 8062, 8063, 8064, 8065, 8066, 8067, 8068, 8069,
+ 8070, 8071, 8072, 8073, 8074, 8075, 8076, 8077,
+ 8078, 4661, 8079, 8080, 8081, 8082, 8083, 8084,
+ 4663, 8085, 8086, 8087, 8088, 8089, 8090, 8091,
+ 8092, 4398, 4732, 8093, 8094, 8095, 8096, 8097,
+ 8098, 8099, 8100, 4664, 8101, 8102, 8103, 8104,
+ 4775, 8105, 8106, 8107, 8108, 8109, 8110, 8111,
+ 8112, 8113, 8114, 8115, 8116, 8117, 4468, 8118,
+ 8119, 8120, 8121, 8122, 8123, 8124, 8125, 8126,
+ 8127, 8128, 4665, 4555, 8129, 8130, 8131, 8132,
+ 8133, 8134, 8135, 8136, 4736, 8137, 8138, 8139,
+ 8140, 8141, 8142, 8143, 8144, 4737, 8145, 8146,
+ 8147, 8148, 8149, 8150, 8151, 8152, 8153, 8154,
+ 8155, 8156, 4739, 8157, 8158, 8159, 8160, 8161,
+ 8162, 8163, 8164, 8165, 8166, 8167, 8167, 8168,
+ 8169, 4741, 8170, 8171, 8172, 8173, 8174, 8175,
+ 8176, 4454, 8177, 8178, 8179, 8180, 8181, 8182,
+ 8183, 4747, 8184, 8185, 8186, 8187, 8188, 8189,
+ 8189, 4748, 4777, 8190, 8191, 8192, 8193, 8194,
+ 4416, 4750, 8195, 8196, 4676, 8197, 8198, 4630,
+ 8199, 8200, 4680, 8201, 8202, 8203, 8204, 8204,
+ 8205, 8206, 8207, 8208, 8209, 8210, 8211, 8212,
+ 8213, 8214, 8215, 8216, 8217, 8218, 8219, 8220,
+ 8221, 8222, 8223, 8224, 8225, 8226, 8227, 8228,
+ 8229, 8230, 8231, 4686, 8232, 8233, 8234, 8235,
+ 8236, 8237, 8238, 8239, 8240, 8241, 8242, 8243,
+ 8244, 8245, 8246, 8247, 8033, 8248, 8249, 8250,
+ 8251, 8252, 8253, 8254, 8255, 8256, 8257, 8258,
+ 8259, 4472, 8260, 8261, 8262, 8263, 8264, 8265,
+ 4689, 8266, 8267, 8268, 8269, 8270, 8271, 8272,
+ 8273, 8274, 8275, 8276, 8277, 8278, 8279, 8280,
+ 8281, 8282, 8283, 8284, 8285, 4411, 8286, 8287,
+ 8288, 8289, 8290, 8291, 4757, 8292, 8293, 8294,
+ 8295, 8296, 8297, 8298, 8299, 8300, 8301, 8302,
+ 8303, 8304, 8305, 8306, 8307, 8308, 8309, 8310,
+ 8311, 4762, 4763, 8312, 8313, 8314, 8315, 8316,
+ 8317, 8318, 8319, 8320, 8321, 8322, 8323, 8324,
+ 4764, 8325, 8326, 8327, 8328, 8329, 8330, 8331,
+ 8332, 8333, 8334, 8335, 8336, 8337, 8338, 8339,
+ 8340, 8341, 8342, 8343, 8344, 8345, 8346, 8347,
+ 8348, 8349, 8350, 8351, 8352, 8353, 8354, 4770,
+ 4770, 8355, 8356, 8357, 8358, 8359, 8360, 8361,
+ 8362, 8363, 8364, 4771, 8365, 8366, 8367, 8368,
+ 8369, 8370, 8371, 8372, 8373, 8374, 8375, 8376,
+ 8377, 8378, 8379, 8380, 8381, 8382, 8383, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 7853, 7854, 7855, 7856, 7857, 4641, 7858,
- 7859, 7860, 7861, 4642, 7862, 7863, 7864, 4643,
- 7865, 7866, 7867, 7868, 7869, 7870, 7871, 7872,
- 7873, 7874, 7875, 7876, 4701, 7877, 7878, 7879,
- 7880, 7881, 7882, 7883, 7884, 7885, 4706, 4644,
- 4645, 4707, 7886, 7887, 4452, 7888, 4646, 7889,
- 7890, 7891, 7892, 7892, 7892, 7893, 7894, 7895,
- 7896, 7897, 7898, 7899, 7900, 7901, 7902, 7903,
- 7904, 7905, 7906, 7907, 7908, 7909, 7910, 7910,
- 4709, 7911, 7912, 7913, 7914, 4648, 7915, 7916,
- 7917, 4605, 7918, 7919, 7920, 7921, 7922, 7923,
- 7924, 7925, 7926, 7927, 7928, 7929, 7930, 7931,
- 7932, 7933, 7934, 7935, 7936, 7937, 7938, 7939,
- 7940, 7941, 7942, 7943, 7943, 7944, 7945, 7946,
- 4448, 7947, 7948, 7949, 7950, 7951, 7952, 7953,
- 7954, 4653, 7955, 7956, 7957, 7958, 7959, 7960,
- 7961, 7962, 7963, 7964, 7965, 7966, 7967, 7968,
- 7969, 7970, 7971, 7972, 7973, 7974, 7975, 4394,
- 7976, 7977, 7978, 7978, 7979, 7980, 7980, 7981,
- 7982, 7983, 7984, 7985, 7986, 7987, 7988, 7989,
- 7990, 7991, 7992, 7993, 4654, 7994, 7995, 7996,
- 7997, 4721, 7997, 7998, 4656, 7999, 8000, 8001,
- 8002, 4657, 4367, 8003, 8004, 8005, 8006, 8007,
- 8008, 8009, 8010, 8011, 8012, 8013, 8014, 8015,
- 8016, 8017, 8018, 8019, 8020, 8021, 8022, 8023,
- 8024, 4658, 8025, 8026, 8027, 8028, 8029, 8030,
- 4660, 8031, 8032, 8033, 8034, 8035, 8036, 8037,
- 8038, 4395, 4729, 8039, 8040, 8041, 8042, 8043,
- 8044, 8045, 8046, 4661, 8047, 8048, 8049, 8050,
- 4772, 8051, 8052, 8053, 8054, 8055, 8056, 8057,
- 8058, 8059, 8060, 8061, 8062, 8063, 4465, 8064,
- 8065, 8066, 8067, 8068, 8069, 8070, 8071, 8072,
- 8073, 8074, 4662, 4552, 8075, 8076, 8077, 8078,
- 8079, 8080, 8081, 8082, 4733, 8083, 8084, 8085,
- 8086, 8087, 8088, 8089, 8090, 4734, 8091, 8092,
- 8093, 8094, 8095, 8096, 8097, 8098, 8099, 8100,
- 8101, 8102, 4736, 8103, 8104, 8105, 8106, 8107,
- 8108, 8109, 8110, 8111, 8112, 8113, 8113, 8114,
- 8115, 4738, 8116, 8117, 8118, 8119, 8120, 8121,
- 8122, 4451, 8123, 8124, 8125, 8126, 8127, 8128,
- 8129, 4744, 8130, 8131, 8132, 8133, 8134, 8135,
- 8135, 4745, 4774, 8136, 8137, 8138, 8139, 8140,
- 4413, 4747, 8141, 8142, 4673, 8143, 8144, 4627,
- 8145, 8146, 4677, 8147, 8148, 8149, 8150, 8150,
- 8151, 8152, 8153, 8154, 8155, 8156, 8157, 8158,
- 8159, 8160, 8161, 8162, 8163, 8164, 8165, 8166,
- 8167, 8168, 8169, 8170, 8171, 8172, 8173, 8174,
- 8175, 8176, 8177, 4683, 8178, 8179, 8180, 8181,
- 8182, 8183, 8184, 8185, 8186, 8187, 8188, 8189,
- 8190, 8191, 8192, 8193, 7979, 8194, 8195, 8196,
- 8197, 8198, 8199, 8200, 8201, 8202, 8203, 8204,
- 8205, 4469, 8206, 8207, 8208, 8209, 8210, 8211,
- 4686, 8212, 8213, 8214, 8215, 8216, 8217, 8218,
- 8219, 8220, 8221, 8222, 8223, 8224, 8225, 8226,
- 8227, 8228, 8229, 8230, 8231, 4408, 8232, 8233,
- 8234, 8235, 8236, 8237, 4754, 8238, 8239, 8240,
- 8241, 8242, 8243, 8244, 8245, 8246, 8247, 8248,
- 8249, 8250, 8251, 8252, 8253, 8254, 8255, 8256,
- 8257, 4759, 4760, 8258, 8259, 8260, 8261, 8262,
- 8263, 8264, 8265, 8266, 8267, 8268, 8269, 8270,
- 4761, 8271, 8272, 8273, 8274, 8275, 8276, 8277,
- 8278, 8279, 8280, 8281, 8282, 8283, 8284, 8285,
- 8286, 8287, 8288, 8289, 8290, 8291, 8292, 8293,
- 8294, 8295, 8296, 8297, 8298, 8299, 8300, 4767,
- 4767, 8301, 8302, 8303, 8304, 8305, 8306, 8307,
- 8308, 8309, 8310, 4768, 8311, 8312, 8313, 8314,
- 8315, 8316, 8317, 8318, 8319, 8320, 8321, 8322,
- 8323, 8324, 8325, 8326, 8327, 8328, 8329, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -7810,6 +7801,54 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 0, 0, 0, 0,
+ 0, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+ 3211, 3211, 3211, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -7820,166 +7859,108 @@ static const utf8proc_uint16_t utf8proc_stage2table[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 0, 0, 0, 0,
- 0, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 3213, 3213, 3213, 3213, 3213, 3213, 3213,
- 3213, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1509, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1510, 0, 0, 0, 0, 0,
+ 0, 8384, 8384, 8384, 8384, 8384, 8384, 8384,
+ 8384, 8384, 8384, 8384, 8384, 8384, 8384, 8384,
+ 8384, 8384, 8384, 8384, 8384, 8384, 8384, 8384,
+ 8384, 8384, 8384, 8384, 8384, 8384, 8384, 8384,
+ 8384, 8384, 8384, 8384, 8384, 8384, 8384, 8384,
+ 8384, 8384, 8384, 8384, 8384, 8384, 8384, 8384,
+ 8384, 8384, 8384, 8384, 8384, 8384, 8384, 8384,
+ 8384, 8384, 8384, 8384, 8384, 8384, 8384, 8384,
+ 8384, 8384, 8384, 8384, 8384, 8384, 8384, 8384,
+ 8384, 8384, 8384, 8384, 8384, 8384, 8384, 8384,
+ 8384, 8384, 8384, 8384, 8384, 8384, 8384, 8384,
+ 8384, 8384, 8384, 8384, 8384, 8384, 8384, 8384,
+ 8384, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 8330, 8330, 8330, 8330, 8330, 8330, 8330,
- 8330, 8330, 8330, 8330, 8330, 8330, 8330, 8330,
- 8330, 8330, 8330, 8330, 8330, 8330, 8330, 8330,
- 8330, 8330, 8330, 8330, 8330, 8330, 8330, 8330,
- 8330, 8330, 8330, 8330, 8330, 8330, 8330, 8330,
- 8330, 8330, 8330, 8330, 8330, 8330, 8330, 8330,
- 8330, 8330, 8330, 8330, 8330, 8330, 8330, 8330,
- 8330, 8330, 8330, 8330, 8330, 8330, 8330, 8330,
- 8330, 8330, 8330, 8330, 8330, 8330, 8330, 8330,
- 8330, 8330, 8330, 8330, 8330, 8330, 8330, 8330,
- 8330, 8330, 8330, 8330, 8330, 8330, 8330, 8330,
- 8330, 8330, 8330, 8330, 8330, 8330, 8330, 8330,
- 8330, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 631, 631, 631, 631, 631, 631, 631,
- 631, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 4354,
- 4354, 4354, 4354, 4354, 4354, 4354, 4354, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+ 4357, 4357, 4357, 4357, 4357, 4357, 4357, 0,
0, };
static const utf8proc_property_t utf8proc_properties[] = {
@@ -8552,9 +8533,9 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1081, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1082, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1083, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1084, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1084, UINT16_MAX, 1084, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1085, UINT16_MAX, 1085, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1086, UINT16_MAX, 1086, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1086, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1087, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1088, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1089, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -8571,34 +8552,33 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1100, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1101, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1102, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1103, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 7, UINT16_MAX, 1104, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1105, UINT16_MAX, 1106, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 9, UINT16_MAX, 1107, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 17, UINT16_MAX, 1108, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1050, UINT16_MAX, 1109, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1052, UINT16_MAX, 1110, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1058, UINT16_MAX, 1111, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 22, UINT16_MAX, 1112, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 24, UINT16_MAX, 1113, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 7, UINT16_MAX, 1103, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1104, UINT16_MAX, 1105, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 9, UINT16_MAX, 1106, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 17, UINT16_MAX, 1107, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1050, UINT16_MAX, 1108, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1052, UINT16_MAX, 1109, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1058, UINT16_MAX, 1110, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 22, UINT16_MAX, 1111, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 24, UINT16_MAX, 1112, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1113, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1114, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1115, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 17500, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 17502, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 17504, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 17506, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 17508, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 17510, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 620, UINT16_MAX, 1128, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 11, UINT16_MAX, 1129, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 18, UINT16_MAX, 1130, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 23, UINT16_MAX, 1131, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1077, UINT16_MAX, 1132, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 17499, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 17501, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 17503, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 17505, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 17507, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 17509, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 620, UINT16_MAX, 1127, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 11, UINT16_MAX, 1128, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 18, UINT16_MAX, 1129, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 23, UINT16_MAX, 1130, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1131, UINT16_MAX, 1132, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, true, false, false, false, false, 0, true, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
{UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, true, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
{UTF8PROC_CATEGORY_MN, 232, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, true, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
@@ -9303,8 +9283,8 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 18331, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
{UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 18333, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
{UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 18335, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 670, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18337, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 670, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18337, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},
{UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1955, UINT16_MAX, 1955, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1956, UINT16_MAX, 1956, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -9494,14 +9474,15 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_MC, 9, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
{UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
{UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_BN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_MN, 234, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 671, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 672, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18566, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 673, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18568, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 674, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18570, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 674, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18570, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 675, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18572, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 676, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -9516,6 +9497,7 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18582, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 681, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
{UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18584, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
+ {UTF8PROC_CATEGORY_MC, 9, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_LINKER},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1345, 1379, UINT16_MAX, 1379, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1347, 1381, UINT16_MAX, 1381, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1359, 1393, UINT16_MAX, 1393, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -9744,7 +9726,7 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2381, UINT16_MAX, 2382, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1038, UINT16_MAX, 2383, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2342, UINT16_MAX, 2384, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1087, UINT16_MAX, 2385, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1086, UINT16_MAX, 2385, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2386, UINT16_MAX, 2387, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1041, UINT16_MAX, 2388, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 629, UINT16_MAX, 2389, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -9765,7 +9747,6 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1074, UINT16_MAX, 2405, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 663, UINT16_MAX, 2406, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1192, UINT16_MAX, 2407, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_MN, 234, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
{UTF8PROC_CATEGORY_MN, 214, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
{UTF8PROC_CATEGORY_MN, 202, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
{UTF8PROC_CATEGORY_MN, 232, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
@@ -10692,9 +10673,7 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 53703, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 37324, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 20943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -12142,7 +12121,7 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6718, UINT16_MAX, 6718, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6719, UINT16_MAX, 6719, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6720, UINT16_MAX, 6720, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1105, UINT16_MAX, 1105, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1104, UINT16_MAX, 1104, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2284, UINT16_MAX, 2284, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2372, UINT16_MAX, 2372, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6721, UINT16_MAX, 6721, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -12180,8 +12159,8 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6750, UINT16_MAX, 6750, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6751, UINT16_MAX, 6751, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6752, UINT16_MAX, 6752, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6753, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6754, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6753, UINT16_MAX, 6753, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6754, UINT16_MAX, 6754, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6755, UINT16_MAX, 6755, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6756, UINT16_MAX, 6756, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6757, UINT16_MAX, 6757, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -12189,18 +12168,18 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6759, UINT16_MAX, 6759, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6760, UINT16_MAX, 6760, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6761, UINT16_MAX, 6761, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 28, UINT16_MAX, 6762, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 31, UINT16_MAX, 6763, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 42, UINT16_MAX, 6764, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6762, UINT16_MAX, 6762, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6763, UINT16_MAX, 6763, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6764, UINT16_MAX, 6764, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6765, UINT16_MAX, 6765, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6766, UINT16_MAX, 6766, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 358, UINT16_MAX, 6767, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 473, UINT16_MAX, 6768, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6769, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6770, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6771, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6772, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6773, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 44, UINT16_MAX, 6766, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 28, UINT16_MAX, 6767, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 31, UINT16_MAX, 6768, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 42, UINT16_MAX, 6769, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6770, UINT16_MAX, 6770, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6771, UINT16_MAX, 6771, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 358, UINT16_MAX, 6772, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 473, UINT16_MAX, 6773, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6774, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6775, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6776, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -12232,33 +12211,33 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6802, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6803, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6804, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6805, UINT16_MAX, 6805, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6805, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6806, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6807, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6808, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6809, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6810, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6810, UINT16_MAX, 6810, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6811, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6812, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6594, UINT16_MAX, 6813, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6777, UINT16_MAX, 6814, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 4664, UINT16_MAX, 6815, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6804, UINT16_MAX, 6816, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6813, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6814, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6815, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6816, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6817, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6818, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6819, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6820, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6821, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6594, UINT16_MAX, 6818, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6782, UINT16_MAX, 6819, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 4664, UINT16_MAX, 6820, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6809, UINT16_MAX, 6821, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6822, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6823, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6824, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6825, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1070, UINT16_MAX, 6826, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6827, 6827, UINT16_MAX, 6827, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6828, 6828, UINT16_MAX, 6828, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6829, 6829, UINT16_MAX, 6829, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6830, 6830, UINT16_MAX, 6830, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6831, 6831, UINT16_MAX, 6831, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6826, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6827, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6828, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6829, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6830, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1070, UINT16_MAX, 6831, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6832, 6832, UINT16_MAX, 6832, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6833, 6833, UINT16_MAX, 6833, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6834, 6834, UINT16_MAX, 6834, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -12334,25 +12313,25 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6904, 6904, UINT16_MAX, 6904, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6905, 6905, UINT16_MAX, 6905, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6906, 6906, UINT16_MAX, 6906, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6907, 6907, UINT16_MAX, 6907, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6908, 6908, UINT16_MAX, 6908, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6909, 6909, UINT16_MAX, 6909, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6910, 6910, UINT16_MAX, 6910, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6911, 6911, UINT16_MAX, 6911, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_LV, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_LVT, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_CS, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_CO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6907, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6908, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4998, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6909, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6910, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6911, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6912, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5052, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6913, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5006, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4998, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6914, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6916, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6917, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5052, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6918, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5006, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6919, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6920, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6921, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -12389,24 +12368,24 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6952, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6953, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6954, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4964, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6955, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6956, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6957, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6958, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6959, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4964, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6960, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6961, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6962, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6963, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6964, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6965, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5037, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6966, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6967, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6968, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6969, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6970, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5037, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6971, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6972, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6973, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -12449,12 +12428,12 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7010, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7011, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7012, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5000, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7013, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7014, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7015, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7016, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7017, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5000, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7018, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7019, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7020, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -12465,21 +12444,21 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7025, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7026, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7027, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4877, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7028, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7029, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7030, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7031, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7032, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4877, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7033, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7034, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7035, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4858, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7036, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7037, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7038, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7039, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7040, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4858, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7041, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7042, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7043, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -12529,12 +12508,12 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7087, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7088, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7089, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5051, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7090, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7091, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7092, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7093, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7094, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5051, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7095, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7096, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7097, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -12542,12 +12521,12 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7099, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7100, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7101, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5603, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7102, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7103, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7104, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7105, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7106, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5603, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7107, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7108, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7109, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -12565,12 +12544,12 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7121, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7122, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7123, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5005, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7124, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7125, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7126, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7127, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7128, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5005, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7129, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7130, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7131, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -12579,12 +12558,12 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7134, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7135, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7136, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4956, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7137, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7138, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7139, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7140, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7141, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4956, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7142, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7143, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7144, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -12596,14 +12575,14 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7150, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7151, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7152, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4983, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7153, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4986, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7154, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7155, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7156, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7157, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4983, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7158, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4986, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7159, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7160, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7161, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -12613,12 +12592,12 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7165, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7166, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7167, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4963, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7168, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7169, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7170, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7171, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7172, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4963, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7173, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7174, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7175, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -12636,12 +12615,12 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7187, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7188, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7189, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4884, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7191, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7192, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7193, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4884, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7195, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7196, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7197, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -12652,17 +12631,17 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7203, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7204, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5608, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7205, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7206, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7207, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7208, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5612, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7209, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5608, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7210, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7211, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7212, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7213, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5612, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7214, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7215, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7216, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -12682,11 +12661,11 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7230, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7231, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7232, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7233, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7234, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7235, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7236, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7237, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7238, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7239, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7240, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7241, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -12714,12 +12693,12 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4917, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7268, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4917, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7272, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -12753,96 +12732,81 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7301, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7302, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7303, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7304, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7305, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7306, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7307, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7309, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7308, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7310, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7311, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7312, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7314, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7315, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7316, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7318, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7317, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7319, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23704, 23704, 7322, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23707, 23707, 7325, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23710, 23710, 7328, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 40097, 40097, 7332, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 40101, 40101, 7336, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23721, 23723, 7341, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23723, 23723, 7342, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23727, 23727, 7345, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23730, 23730, 7348, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23733, 23733, 7351, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23736, 23736, 7354, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23739, 23739, 7357, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7321, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7323, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7324, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23709, 23709, 7327, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23712, 23712, 7330, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23715, 23715, 7333, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 40102, 40102, 7337, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 40106, 40106, 7341, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23726, 23728, 7346, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23728, 23728, 7347, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23732, 23732, 7350, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23735, 23735, 7353, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23738, 23738, 7356, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23741, 23741, 7359, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23744, 23744, 7362, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_MN, 26, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23744, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 7362, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23749, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 7367, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 4013, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 4016, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 7363, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 7364, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 7365, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 7366, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 7367, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 7368, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 7369, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 7370, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 7371, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 7372, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 7373, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_FONT, 3939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23753, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23755, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23757, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23759, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23761, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23763, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23765, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23769, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23771, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23773, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23777, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23779, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23783, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23785, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23787, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23789, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23791, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23793, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23795, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23797, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23799, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23801, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23803, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23805, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23807, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23809, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23811, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23813, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23815, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_COMPAT, 23817, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7435, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7435, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7436, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7436, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7436, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7436, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7437, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7437, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7437, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7437, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7438, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7438, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7438, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7438, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7439, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7439, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7439, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7439, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23760, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23762, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23764, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23766, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23768, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23770, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23772, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23774, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23776, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23778, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23780, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23782, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23784, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23786, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23788, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23790, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23792, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23794, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23796, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23798, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23800, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23802, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23804, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23806, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23808, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23810, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23812, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23814, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23816, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23818, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23820, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_COMPAT, 23822, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7440, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7440, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7440, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7440, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7441, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7441, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7441, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -12873,32 +12837,34 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7447, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7458, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7458, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -12907,6 +12873,8 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -12919,642 +12887,638 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7467, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7467, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7467, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7467, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7468, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7468, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7470, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7470, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7470, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7470, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7471, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7471, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7472, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7472, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7473, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7473, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7473, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7473, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7474, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7474, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23859, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23859, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23861, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23861, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23865, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23865, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23867, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23867, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23869, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23869, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23871, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23871, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23871, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23873, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23873, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23873, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7474, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7475, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7475, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7476, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7476, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7477, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7477, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23864, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23864, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23866, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23866, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23868, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23868, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23870, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23870, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23872, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23872, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23874, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23874, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23876, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23878, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23880, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23882, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23884, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23886, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23888, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23890, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23892, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23894, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23896, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23898, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23900, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23902, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23904, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23906, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23908, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23910, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23912, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23914, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23916, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23918, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23920, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23922, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23924, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23926, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23928, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23930, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23932, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23934, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23936, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23938, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23940, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23942, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23944, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23946, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23948, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23950, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23952, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23954, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23956, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23958, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23960, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23962, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23964, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23966, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23968, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23970, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23972, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23974, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23976, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23978, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23980, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23982, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23984, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23986, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23988, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23990, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23992, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23994, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23996, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23998, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24000, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24002, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24004, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24006, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24008, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24010, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24012, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24014, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24016, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24018, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24020, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24022, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24024, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24026, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24028, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24030, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24032, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24034, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24036, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24038, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24040, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24042, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24044, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24046, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24048, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24050, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24052, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24054, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24056, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24058, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24060, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40458, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24080, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24082, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23880, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24084, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23882, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24086, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24088, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23890, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24090, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23892, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23894, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24092, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24094, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23902, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24096, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23904, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23906, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24098, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24100, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23910, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24102, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23912, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23914, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23972, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23974, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23980, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23982, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23984, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23992, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23994, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23996, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23998, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24006, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24008, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24010, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24104, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24018, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24106, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24108, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24030, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24110, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24032, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24034, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24060, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24112, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24114, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24050, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24116, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24052, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24054, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23876, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23876, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23878, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23878, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23878, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24118, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23880, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24120, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23884, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23886, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23888, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23890, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24122, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23896, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23898, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23900, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23902, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24124, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23910, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23916, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23918, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23920, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23922, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23924, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23928, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23930, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23932, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23934, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23936, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23938, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24126, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23940, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23942, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23944, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23946, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23948, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23950, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23954, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23956, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23958, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23960, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23962, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23964, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23966, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23968, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23970, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23976, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23978, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23986, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23988, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23990, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23992, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23994, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24000, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24002, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24004, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24006, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24128, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24012, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24014, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24016, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24018, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24024, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24026, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24028, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24030, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24130, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24036, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24038, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24132, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24044, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24046, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24048, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24050, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24134, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23880, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24120, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23890, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24122, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23902, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24124, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23910, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24136, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23936, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24138, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24140, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24142, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23992, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23994, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24006, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24030, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24130, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24050, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24134, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 40528, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 40531, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 40534, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24153, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24155, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24157, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24159, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24161, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24163, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24165, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24167, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24169, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24171, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24173, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24175, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24177, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24179, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24181, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24183, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24185, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24187, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24189, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24191, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24193, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24195, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24197, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24140, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24199, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24201, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24203, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24205, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24153, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24155, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24157, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24159, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24161, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24163, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24165, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24167, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24169, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24171, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24173, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24175, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24177, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24179, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24181, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24183, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24185, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24187, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24189, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24191, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24193, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24195, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24197, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24140, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24199, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24201, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24203, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24205, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24193, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24195, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24197, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24140, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24138, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24142, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23952, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23930, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23932, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23934, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24193, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24195, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24197, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23952, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23954, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24207, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24207, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7496, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7496, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7496, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7496, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23881, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23883, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23885, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23887, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23889, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23891, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23893, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23895, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23897, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23899, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23901, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23903, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23905, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23907, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23909, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23911, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23913, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23917, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23919, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23921, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23923, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23925, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23927, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23929, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23931, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23933, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23945, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23947, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23949, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23951, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23953, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23955, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23957, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23959, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23961, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23963, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23965, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23967, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23969, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23971, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23973, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23975, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23977, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23979, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23981, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23983, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23985, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23987, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23989, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23991, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23993, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23995, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23997, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23999, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24001, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24003, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24005, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24007, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24009, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24011, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24013, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24015, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24017, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24019, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24021, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24023, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24025, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24027, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24029, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24031, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24033, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24035, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24037, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24039, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24041, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24043, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24045, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24047, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24049, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24051, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24053, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24055, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24057, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24059, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24061, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24063, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24065, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24085, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24087, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23885, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24089, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23887, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24091, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24093, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23895, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24095, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23897, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23899, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24097, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24099, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23907, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24101, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23909, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23911, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24103, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24105, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24107, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23917, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23919, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23977, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23979, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23985, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23987, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23989, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23997, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23999, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24001, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24003, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24011, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24013, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24015, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24109, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24023, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24111, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24113, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24035, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24115, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24037, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24039, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24065, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24117, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24119, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24055, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24121, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24057, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24059, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23881, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23883, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24123, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23885, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24125, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23889, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23891, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23893, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23895, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24127, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23901, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23903, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23905, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23907, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24129, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23921, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23923, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23925, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23927, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23929, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23933, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24131, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23945, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23947, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23949, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23951, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23953, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23955, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23959, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23961, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23963, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23965, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23967, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23969, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23971, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23973, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23975, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23981, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23983, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23991, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23993, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23995, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23997, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23999, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24005, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24007, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24009, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24011, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24133, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24017, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24019, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24021, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24023, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24029, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24031, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24033, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24035, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24135, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24041, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24043, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24137, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24049, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24051, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24053, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24055, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24139, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23885, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24125, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23895, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24127, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23907, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24129, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24141, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24143, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24145, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24147, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23997, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23999, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24011, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24035, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24135, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24055, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24139, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 40533, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 40536, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 40539, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24158, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24160, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24162, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24164, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24166, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24168, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24170, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24172, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24174, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24176, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24178, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24180, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24182, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24184, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24186, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24188, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24192, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24196, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24145, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24204, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24206, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24208, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24210, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24158, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24160, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24162, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24164, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24166, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24168, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24170, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24172, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24174, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24176, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24178, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24180, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24182, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24184, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24186, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24188, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24192, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24196, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24145, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24204, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24206, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24208, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24210, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24145, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24143, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24147, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23957, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23957, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23959, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24212, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24212, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40593, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40596, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40596, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40599, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40602, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40605, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40608, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40611, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40614, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40614, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40617, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40620, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40623, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40626, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40629, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40632, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40632, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40635, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40638, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40638, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40641, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40641, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40644, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40647, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40647, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40650, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40653, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40653, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40656, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40656, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40659, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40662, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40662, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40665, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40665, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40668, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40671, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40674, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40677, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40677, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40680, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40683, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40686, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40689, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40692, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40692, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40695, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40698, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40701, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40704, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40707, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40710, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40710, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40713, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40713, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40716, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40716, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40719, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40722, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40725, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40728, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40731, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40734, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40737, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40740, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40743, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40746, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40749, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40752, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40755, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40755, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40761, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40764, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40770, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40773, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40776, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40779, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40782, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40785, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40788, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40791, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40794, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40797, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40800, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40803, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40806, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40809, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40812, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40815, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40818, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40821, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40824, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40827, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40830, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40833, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40695, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40701, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40836, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40839, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40842, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40845, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40848, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40851, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40848, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40842, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40854, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40857, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40860, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40866, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40851, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40674, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40644, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40869, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40872, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40875, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40878, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40598, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40601, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40601, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40604, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40607, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40610, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40613, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40616, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40619, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40619, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40622, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40625, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40628, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40631, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40634, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40637, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40637, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40640, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40643, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40643, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40646, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40646, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40649, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40652, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40652, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40655, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40658, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40658, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40661, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40661, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40664, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40667, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40667, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40670, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40670, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40673, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40676, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40679, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40682, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40682, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40685, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40688, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40691, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40694, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40697, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40697, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40700, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40703, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40706, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40709, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40712, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40715, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40715, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40718, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40718, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40721, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40721, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40724, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40727, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40730, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40733, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40736, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40745, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40748, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40751, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40754, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40757, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40760, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40760, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40763, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40766, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40769, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40772, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40772, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40778, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40784, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40787, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40790, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40793, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40796, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40799, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40802, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40805, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40808, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40811, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40814, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40817, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40820, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40823, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40826, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40829, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40832, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40835, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40838, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40700, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40706, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40841, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40844, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40847, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40850, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40853, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40856, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40853, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40847, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40859, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40862, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40865, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40868, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40871, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40856, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40679, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40649, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40874, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40877, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40880, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40883, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57280, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57290, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57295, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40916, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57303, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57322, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57331, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8184, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8185, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8186, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8187, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 1153, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8188, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57300, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40921, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57308, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57327, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57336, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8189, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8191, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8191, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8192, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 1153, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8193, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8195, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PC, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8196, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8195, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8196, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8197, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8199, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PC, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8201, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 3942, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 3943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8197, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8199, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8201, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8203, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8204, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8203, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8204, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8205, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8206, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8207, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8208, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8209, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 4264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 4265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8205, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8206, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8207, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8208, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8209, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8210, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8211, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PC, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8196, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_SMALL, 8184, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8185, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8210, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8211, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8212, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8213, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8214, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8215, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8216, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PC, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8201, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_SMALL, 8189, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_SMALL, 3900, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 1153, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_SMALL, 8187, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8189, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8188, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_SMALL, 8192, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8193, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8199, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 3942, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 3943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8197, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8199, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_SMALL, 8212, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8213, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8214, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8203, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8204, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8205, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_SMALL, 8217, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8218, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8219, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SMALL, 3939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SMALL, 8215, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8216, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8217, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SMALL, 8220, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8221, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8222, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 3941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8218, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_SMALL, 8219, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_SMALL, 8220, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8221, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24606, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24608, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24610, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24612, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24614, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24616, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24618, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24620, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24622, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24624, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24626, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24628, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24630, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24632, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8250, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8251, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8251, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8252, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8252, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8253, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8253, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8254, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8254, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8223, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_SMALL, 8224, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_SMALL, 8225, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8226, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24611, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24613, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24615, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24617, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24619, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24621, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24623, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24625, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24627, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24629, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24631, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24633, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24635, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24637, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8255, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8255, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8255, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8255, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8256, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8256, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8257, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8257, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8257, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8257, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8258, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8258, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8259, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8259, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8259, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8259, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8261, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8261, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8261, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8261, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8262, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8262, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8262, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8262, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8268, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8268, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8268, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8268, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8272, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8272, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8272, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8272, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -13597,35 +13561,55 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8282, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7474, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7474, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8284, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8284, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8284, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8284, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24669, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24669, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24671, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24671, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24673, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24673, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24675, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24675, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8188, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8293, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 8212, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 8219, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 8220, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8213, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8294, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8286, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8286, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8286, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8286, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8287, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8287, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8287, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8287, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8288, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8288, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8289, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8289, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8289, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8289, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24674, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24674, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24676, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24676, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24678, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24678, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24680, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24680, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8193, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8298, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 8217, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 8224, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 8225, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8218, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8299, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 3942, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 3943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8214, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8219, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_WIDE, 3939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, 8184, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_WIDE, 8215, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, 8189, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_WIDE, 8220, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, 3900, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, 8295, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, 8300, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 3931, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 66, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 58, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -13636,93 +13620,93 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 3936, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 3937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 3938, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, 8187, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, 8192, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 1153, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8216, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8221, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 3941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8217, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8189, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8221, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 26, 8296, UINT16_MAX, 8296, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 27, 8297, UINT16_MAX, 8297, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 28, 8298, UINT16_MAX, 8298, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 29, 8299, UINT16_MAX, 8299, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 30, 8300, UINT16_MAX, 8300, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 31, 8301, UINT16_MAX, 8301, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 32, 8302, UINT16_MAX, 8302, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 33, 8303, UINT16_MAX, 8303, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 34, 8304, UINT16_MAX, 8304, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 35, 8305, UINT16_MAX, 8305, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 36, 8306, UINT16_MAX, 8306, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 37, 8307, UINT16_MAX, 8307, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 38, 8308, UINT16_MAX, 8308, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 39, 8309, UINT16_MAX, 8309, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 40, 8310, UINT16_MAX, 8310, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 41, 8311, UINT16_MAX, 8311, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 42, 8312, UINT16_MAX, 8312, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 43, 8313, UINT16_MAX, 8313, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 44, 8314, UINT16_MAX, 8314, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 45, 8315, UINT16_MAX, 8315, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 46, 8316, UINT16_MAX, 8316, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 47, 8317, UINT16_MAX, 8317, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 48, 8318, UINT16_MAX, 8318, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 49, 8319, UINT16_MAX, 8319, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 50, 8320, UINT16_MAX, 8320, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 51, 8321, UINT16_MAX, 8321, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8209, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8218, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8210, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8322, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PC, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8196, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8222, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8226, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 26, 8301, UINT16_MAX, 8301, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 27, 8302, UINT16_MAX, 8302, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 28, 8303, UINT16_MAX, 8303, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 29, 8304, UINT16_MAX, 8304, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 30, 8305, UINT16_MAX, 8305, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 31, 8306, UINT16_MAX, 8306, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 32, 8307, UINT16_MAX, 8307, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 33, 8308, UINT16_MAX, 8308, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 34, 8309, UINT16_MAX, 8309, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 35, 8310, UINT16_MAX, 8310, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 36, 8311, UINT16_MAX, 8311, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 37, 8312, UINT16_MAX, 8312, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 38, 8313, UINT16_MAX, 8313, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 39, 8314, UINT16_MAX, 8314, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 40, 8315, UINT16_MAX, 8315, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 41, 8316, UINT16_MAX, 8316, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 42, 8317, UINT16_MAX, 8317, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 43, 8318, UINT16_MAX, 8318, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 44, 8319, UINT16_MAX, 8319, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 45, 8320, UINT16_MAX, 8320, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 46, 8321, UINT16_MAX, 8321, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 47, 8322, UINT16_MAX, 8322, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 48, 8323, UINT16_MAX, 8323, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 49, 8324, UINT16_MAX, 8324, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 50, 8325, UINT16_MAX, 8325, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 51, 8326, UINT16_MAX, 8326, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8214, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8223, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8215, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8327, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PC, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8201, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 3856, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 0, UINT16_MAX, 8323, UINT16_MAX, 8323, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1, UINT16_MAX, 8324, UINT16_MAX, 8324, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 2, UINT16_MAX, 8325, UINT16_MAX, 8325, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 3, UINT16_MAX, 8326, UINT16_MAX, 8326, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 4, UINT16_MAX, 8327, UINT16_MAX, 8327, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 5, UINT16_MAX, 8328, UINT16_MAX, 8328, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 6, UINT16_MAX, 8329, UINT16_MAX, 8329, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 7, UINT16_MAX, 8330, UINT16_MAX, 8330, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 8, UINT16_MAX, 8331, UINT16_MAX, 8331, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 9, UINT16_MAX, 8332, UINT16_MAX, 8332, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 10, UINT16_MAX, 8333, UINT16_MAX, 8333, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 11, UINT16_MAX, 8334, UINT16_MAX, 8334, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 12, UINT16_MAX, 8335, UINT16_MAX, 8335, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 13, UINT16_MAX, 8336, UINT16_MAX, 8336, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 14, UINT16_MAX, 8337, UINT16_MAX, 8337, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 15, UINT16_MAX, 8338, UINT16_MAX, 8338, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 16, UINT16_MAX, 8339, UINT16_MAX, 8339, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 17, UINT16_MAX, 8340, UINT16_MAX, 8340, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 18, UINT16_MAX, 8341, UINT16_MAX, 8341, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 19, UINT16_MAX, 8342, UINT16_MAX, 8342, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 20, UINT16_MAX, 8343, UINT16_MAX, 8343, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 21, UINT16_MAX, 8344, UINT16_MAX, 8344, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 22, UINT16_MAX, 8345, UINT16_MAX, 8345, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 23, UINT16_MAX, 8346, UINT16_MAX, 8346, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 24, UINT16_MAX, 8347, UINT16_MAX, 8347, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 25, UINT16_MAX, 8348, UINT16_MAX, 8348, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8197, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8349, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8350, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8351, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8352, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8186, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8205, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8206, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8185, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8353, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 0, UINT16_MAX, 8328, UINT16_MAX, 8328, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1, UINT16_MAX, 8329, UINT16_MAX, 8329, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 2, UINT16_MAX, 8330, UINT16_MAX, 8330, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 3, UINT16_MAX, 8331, UINT16_MAX, 8331, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 4, UINT16_MAX, 8332, UINT16_MAX, 8332, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 5, UINT16_MAX, 8333, UINT16_MAX, 8333, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 6, UINT16_MAX, 8334, UINT16_MAX, 8334, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 7, UINT16_MAX, 8335, UINT16_MAX, 8335, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 8, UINT16_MAX, 8336, UINT16_MAX, 8336, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 9, UINT16_MAX, 8337, UINT16_MAX, 8337, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 10, UINT16_MAX, 8338, UINT16_MAX, 8338, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 11, UINT16_MAX, 8339, UINT16_MAX, 8339, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 12, UINT16_MAX, 8340, UINT16_MAX, 8340, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 13, UINT16_MAX, 8341, UINT16_MAX, 8341, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 14, UINT16_MAX, 8342, UINT16_MAX, 8342, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 15, UINT16_MAX, 8343, UINT16_MAX, 8343, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 16, UINT16_MAX, 8344, UINT16_MAX, 8344, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 17, UINT16_MAX, 8345, UINT16_MAX, 8345, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 18, UINT16_MAX, 8346, UINT16_MAX, 8346, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 19, UINT16_MAX, 8347, UINT16_MAX, 8347, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 20, UINT16_MAX, 8348, UINT16_MAX, 8348, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 21, UINT16_MAX, 8349, UINT16_MAX, 8349, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 22, UINT16_MAX, 8350, UINT16_MAX, 8350, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 23, UINT16_MAX, 8351, UINT16_MAX, 8351, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 24, UINT16_MAX, 8352, UINT16_MAX, 8352, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 25, UINT16_MAX, 8353, UINT16_MAX, 8353, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8354, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8203, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8355, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8356, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8357, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8191, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8210, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8211, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8358, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8354, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8355, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8356, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8357, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8358, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8359, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8360, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8361, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8362, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8363, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8363, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8364, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8365, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8366, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8367, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8368, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5701, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5702, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5703, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -13767,15 +13751,10 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5743, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5744, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8364, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8365, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8366, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8367, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8368, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8369, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8370, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8371, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8372, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8370, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8371, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8372, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8373, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8374, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8375, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -13822,639 +13801,695 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8416, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8417, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8418, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 8419, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 8420, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8421, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8422, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8423, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8419, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8420, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8421, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8422, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8423, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 8424, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 8425, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8426, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8427, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8428, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8429, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8430, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8426, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8427, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8428, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 8429, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 8430, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8431, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8432, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8432, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8433, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8434, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8435, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8436, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8437, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8433, UINT16_MAX, 8433, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8435, UINT16_MAX, 8435, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8437, UINT16_MAX, 8437, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8439, UINT16_MAX, 8439, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8441, UINT16_MAX, 8441, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8443, UINT16_MAX, 8443, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8445, UINT16_MAX, 8445, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8447, UINT16_MAX, 8447, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8449, UINT16_MAX, 8449, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8451, UINT16_MAX, 8451, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8453, UINT16_MAX, 8453, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8455, UINT16_MAX, 8455, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8457, UINT16_MAX, 8457, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8459, UINT16_MAX, 8459, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8461, UINT16_MAX, 8461, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8463, UINT16_MAX, 8463, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8465, UINT16_MAX, 8465, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8467, UINT16_MAX, 8467, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8469, UINT16_MAX, 8469, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8471, UINT16_MAX, 8471, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8473, UINT16_MAX, 8473, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8475, UINT16_MAX, 8475, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8477, UINT16_MAX, 8477, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8479, UINT16_MAX, 8479, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8481, UINT16_MAX, 8481, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8483, UINT16_MAX, 8483, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8485, UINT16_MAX, 8485, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8487, UINT16_MAX, 8487, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8489, UINT16_MAX, 8489, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8491, UINT16_MAX, 8491, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8493, UINT16_MAX, 8493, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8495, UINT16_MAX, 8495, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8497, UINT16_MAX, 8497, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8499, UINT16_MAX, 8499, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8501, UINT16_MAX, 8501, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8503, UINT16_MAX, 8503, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8505, UINT16_MAX, 8505, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8507, UINT16_MAX, 8507, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8509, UINT16_MAX, 8509, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8511, UINT16_MAX, 8511, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8513, UINT16_MAX, 8513, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8515, UINT16_MAX, 8515, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8517, UINT16_MAX, 8517, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8519, UINT16_MAX, 8519, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8521, UINT16_MAX, 8521, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8523, UINT16_MAX, 8523, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8525, UINT16_MAX, 8525, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8527, UINT16_MAX, 8527, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8529, UINT16_MAX, 8529, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8531, UINT16_MAX, 8531, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8533, UINT16_MAX, 8533, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8535, UINT16_MAX, 8535, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8537, UINT16_MAX, 8537, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8539, UINT16_MAX, 8539, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8541, UINT16_MAX, 8541, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8543, UINT16_MAX, 8543, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8545, UINT16_MAX, 8545, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8547, UINT16_MAX, 8547, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8549, UINT16_MAX, 8549, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8551, UINT16_MAX, 8551, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8553, UINT16_MAX, 8553, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8555, UINT16_MAX, 8555, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8557, UINT16_MAX, 8557, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8559, UINT16_MAX, 8559, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8561, UINT16_MAX, 8561, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8563, UINT16_MAX, 8563, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8565, UINT16_MAX, 8565, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8567, UINT16_MAX, 8567, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8569, UINT16_MAX, 8569, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8571, UINT16_MAX, 8571, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8573, UINT16_MAX, 8573, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8575, UINT16_MAX, 8575, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8577, UINT16_MAX, 8577, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8579, UINT16_MAX, 8579, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8581, UINT16_MAX, 8581, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8583, UINT16_MAX, 8583, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8585, UINT16_MAX, 8585, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8587, UINT16_MAX, 8587, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8589, UINT16_MAX, 8589, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8591, UINT16_MAX, 8591, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8593, UINT16_MAX, 8593, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8595, UINT16_MAX, 8595, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8597, UINT16_MAX, 8597, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8599, UINT16_MAX, 8599, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8601, UINT16_MAX, 8601, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8603, UINT16_MAX, 8603, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8605, UINT16_MAX, 8605, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8607, UINT16_MAX, 8607, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8609, UINT16_MAX, 8609, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8611, UINT16_MAX, 8611, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8613, UINT16_MAX, 8613, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8615, UINT16_MAX, 8615, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8617, UINT16_MAX, 8617, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8619, UINT16_MAX, 8619, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8621, UINT16_MAX, 8621, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8623, UINT16_MAX, 8623, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8625, UINT16_MAX, 8625, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8627, UINT16_MAX, 8627, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8629, UINT16_MAX, 8629, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8631, UINT16_MAX, 8631, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8633, UINT16_MAX, 8633, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8635, UINT16_MAX, 8635, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8637, UINT16_MAX, 8637, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8639, UINT16_MAX, 8639, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8641, UINT16_MAX, 8641, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8643, UINT16_MAX, 8643, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8645, UINT16_MAX, 8645, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8647, UINT16_MAX, 8647, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8649, UINT16_MAX, 8649, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8651, UINT16_MAX, 8651, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8653, UINT16_MAX, 8653, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8655, UINT16_MAX, 8655, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8657, UINT16_MAX, 8657, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8659, UINT16_MAX, 8659, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8661, UINT16_MAX, 8661, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8663, UINT16_MAX, 8663, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8665, UINT16_MAX, 8665, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8667, UINT16_MAX, 8667, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8669, UINT16_MAX, 8669, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8671, UINT16_MAX, 8671, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8673, UINT16_MAX, 8673, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8675, UINT16_MAX, 8675, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8677, UINT16_MAX, 8677, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8679, UINT16_MAX, 8679, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8681, UINT16_MAX, 8681, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8683, UINT16_MAX, 8683, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8685, UINT16_MAX, 8685, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8687, UINT16_MAX, 8687, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8689, UINT16_MAX, 8689, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8691, UINT16_MAX, 8691, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8693, UINT16_MAX, 8693, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8695, UINT16_MAX, 8695, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8697, UINT16_MAX, 8697, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8699, UINT16_MAX, 8699, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8701, UINT16_MAX, 8701, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8703, UINT16_MAX, 8703, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8705, UINT16_MAX, 8705, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8707, UINT16_MAX, 8707, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8709, UINT16_MAX, 8709, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8711, UINT16_MAX, 8711, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8713, UINT16_MAX, 8713, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8715, UINT16_MAX, 8715, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8717, UINT16_MAX, 8717, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8719, UINT16_MAX, 8719, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8721, UINT16_MAX, 8721, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8723, UINT16_MAX, 8723, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8725, UINT16_MAX, 8725, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8727, UINT16_MAX, 8727, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8729, UINT16_MAX, 8729, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8731, UINT16_MAX, 8731, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8733, UINT16_MAX, 8733, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8735, UINT16_MAX, 8735, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8737, UINT16_MAX, 8737, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8739, UINT16_MAX, 8739, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8741, UINT16_MAX, 8741, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8743, UINT16_MAX, 8743, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8745, UINT16_MAX, 8745, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8747, UINT16_MAX, 8747, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8749, UINT16_MAX, 8749, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8751, UINT16_MAX, 8751, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8753, UINT16_MAX, 8753, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8755, UINT16_MAX, 8755, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8757, UINT16_MAX, 8757, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8759, UINT16_MAX, 8759, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8761, UINT16_MAX, 8761, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8763, UINT16_MAX, 8763, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8765, UINT16_MAX, 8765, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8767, UINT16_MAX, 8767, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8769, UINT16_MAX, 8769, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8771, UINT16_MAX, 8771, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8773, UINT16_MAX, 8773, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8775, UINT16_MAX, 8775, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8777, UINT16_MAX, 8777, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8779, UINT16_MAX, 8779, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8781, UINT16_MAX, 8781, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8783, UINT16_MAX, 8783, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8785, UINT16_MAX, 8785, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8787, UINT16_MAX, 8787, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8789, UINT16_MAX, 8789, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8791, UINT16_MAX, 8791, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8793, UINT16_MAX, 8793, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8795, UINT16_MAX, 8795, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8797, UINT16_MAX, 8797, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8799, UINT16_MAX, 8799, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8801, UINT16_MAX, 8801, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8803, UINT16_MAX, 8803, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8805, UINT16_MAX, 8805, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8807, UINT16_MAX, 8807, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8809, UINT16_MAX, 8809, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8811, UINT16_MAX, 8811, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8813, UINT16_MAX, 8813, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8815, UINT16_MAX, 8815, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8817, UINT16_MAX, 8817, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8819, UINT16_MAX, 8819, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8821, UINT16_MAX, 8821, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8823, UINT16_MAX, 8823, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8825, UINT16_MAX, 8825, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8827, UINT16_MAX, 8827, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8829, UINT16_MAX, 8829, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8831, UINT16_MAX, 8831, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8833, UINT16_MAX, 8833, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8835, UINT16_MAX, 8835, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8837, UINT16_MAX, 8837, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8839, UINT16_MAX, 8839, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8841, UINT16_MAX, 8841, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8843, UINT16_MAX, 8843, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8845, UINT16_MAX, 8845, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8847, UINT16_MAX, 8847, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8849, UINT16_MAX, 8849, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8851, UINT16_MAX, 8851, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8853, UINT16_MAX, 8853, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8855, UINT16_MAX, 8855, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8857, UINT16_MAX, 8857, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8859, UINT16_MAX, 8859, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8861, UINT16_MAX, 8861, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8863, UINT16_MAX, 8863, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8865, UINT16_MAX, 8865, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8867, UINT16_MAX, 8867, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8869, UINT16_MAX, 8869, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8871, UINT16_MAX, 8871, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8873, UINT16_MAX, 8873, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8875, UINT16_MAX, 8875, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25261, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8438, UINT16_MAX, 8438, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8440, UINT16_MAX, 8440, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8442, UINT16_MAX, 8442, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8444, UINT16_MAX, 8444, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8446, UINT16_MAX, 8446, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8448, UINT16_MAX, 8448, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8450, UINT16_MAX, 8450, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8452, UINT16_MAX, 8452, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8454, UINT16_MAX, 8454, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8456, UINT16_MAX, 8456, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8458, UINT16_MAX, 8458, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8460, UINT16_MAX, 8460, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8462, UINT16_MAX, 8462, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8464, UINT16_MAX, 8464, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8466, UINT16_MAX, 8466, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8468, UINT16_MAX, 8468, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8470, UINT16_MAX, 8470, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8472, UINT16_MAX, 8472, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8474, UINT16_MAX, 8474, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8476, UINT16_MAX, 8476, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8478, UINT16_MAX, 8478, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8480, UINT16_MAX, 8480, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8482, UINT16_MAX, 8482, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8484, UINT16_MAX, 8484, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8486, UINT16_MAX, 8486, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8488, UINT16_MAX, 8488, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8490, UINT16_MAX, 8490, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8492, UINT16_MAX, 8492, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8494, UINT16_MAX, 8494, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8496, UINT16_MAX, 8496, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8498, UINT16_MAX, 8498, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8500, UINT16_MAX, 8500, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8502, UINT16_MAX, 8502, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8504, UINT16_MAX, 8504, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8506, UINT16_MAX, 8506, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8508, UINT16_MAX, 8508, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8510, UINT16_MAX, 8510, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8512, UINT16_MAX, 8512, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8514, UINT16_MAX, 8514, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8516, UINT16_MAX, 8516, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8518, UINT16_MAX, 8518, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8520, UINT16_MAX, 8520, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8522, UINT16_MAX, 8522, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8524, UINT16_MAX, 8524, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8526, UINT16_MAX, 8526, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8528, UINT16_MAX, 8528, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8530, UINT16_MAX, 8530, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8532, UINT16_MAX, 8532, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8534, UINT16_MAX, 8534, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8536, UINT16_MAX, 8536, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8538, UINT16_MAX, 8538, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8540, UINT16_MAX, 8540, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8542, UINT16_MAX, 8542, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8544, UINT16_MAX, 8544, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8546, UINT16_MAX, 8546, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8548, UINT16_MAX, 8548, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8550, UINT16_MAX, 8550, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8552, UINT16_MAX, 8552, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8554, UINT16_MAX, 8554, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8556, UINT16_MAX, 8556, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8558, UINT16_MAX, 8558, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8560, UINT16_MAX, 8560, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8562, UINT16_MAX, 8562, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8564, UINT16_MAX, 8564, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8566, UINT16_MAX, 8566, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8568, UINT16_MAX, 8568, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8570, UINT16_MAX, 8570, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8572, UINT16_MAX, 8572, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8574, UINT16_MAX, 8574, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8576, UINT16_MAX, 8576, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8578, UINT16_MAX, 8578, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8580, UINT16_MAX, 8580, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8582, UINT16_MAX, 8582, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8584, UINT16_MAX, 8584, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8586, UINT16_MAX, 8586, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8588, UINT16_MAX, 8588, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8590, UINT16_MAX, 8590, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8592, UINT16_MAX, 8592, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8594, UINT16_MAX, 8594, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8596, UINT16_MAX, 8596, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8598, UINT16_MAX, 8598, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8600, UINT16_MAX, 8600, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8602, UINT16_MAX, 8602, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8604, UINT16_MAX, 8604, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8606, UINT16_MAX, 8606, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8608, UINT16_MAX, 8608, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8610, UINT16_MAX, 8610, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8612, UINT16_MAX, 8612, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8614, UINT16_MAX, 8614, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8616, UINT16_MAX, 8616, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8618, UINT16_MAX, 8618, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8620, UINT16_MAX, 8620, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8622, UINT16_MAX, 8622, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8624, UINT16_MAX, 8624, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8626, UINT16_MAX, 8626, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8628, UINT16_MAX, 8628, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8630, UINT16_MAX, 8630, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8632, UINT16_MAX, 8632, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8634, UINT16_MAX, 8634, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8636, UINT16_MAX, 8636, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8638, UINT16_MAX, 8638, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8640, UINT16_MAX, 8640, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8642, UINT16_MAX, 8642, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8644, UINT16_MAX, 8644, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8646, UINT16_MAX, 8646, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8648, UINT16_MAX, 8648, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8650, UINT16_MAX, 8650, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8652, UINT16_MAX, 8652, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8654, UINT16_MAX, 8654, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8656, UINT16_MAX, 8656, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8658, UINT16_MAX, 8658, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8660, UINT16_MAX, 8660, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8662, UINT16_MAX, 8662, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8664, UINT16_MAX, 8664, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8666, UINT16_MAX, 8666, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8668, UINT16_MAX, 8668, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8670, UINT16_MAX, 8670, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8672, UINT16_MAX, 8672, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8674, UINT16_MAX, 8674, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8676, UINT16_MAX, 8676, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8678, UINT16_MAX, 8678, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8680, UINT16_MAX, 8680, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8682, UINT16_MAX, 8682, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8684, UINT16_MAX, 8684, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8686, UINT16_MAX, 8686, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8688, UINT16_MAX, 8688, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8690, UINT16_MAX, 8690, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8692, UINT16_MAX, 8692, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8694, UINT16_MAX, 8694, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8696, UINT16_MAX, 8696, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8698, UINT16_MAX, 8698, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8700, UINT16_MAX, 8700, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8702, UINT16_MAX, 8702, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8704, UINT16_MAX, 8704, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8706, UINT16_MAX, 8706, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8708, UINT16_MAX, 8708, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8710, UINT16_MAX, 8710, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8712, UINT16_MAX, 8712, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8714, UINT16_MAX, 8714, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8716, UINT16_MAX, 8716, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8718, UINT16_MAX, 8718, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8720, UINT16_MAX, 8720, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8722, UINT16_MAX, 8722, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8724, UINT16_MAX, 8724, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8726, UINT16_MAX, 8726, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8728, UINT16_MAX, 8728, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8730, UINT16_MAX, 8730, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8732, UINT16_MAX, 8732, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8734, UINT16_MAX, 8734, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8736, UINT16_MAX, 8736, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8738, UINT16_MAX, 8738, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8740, UINT16_MAX, 8740, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8742, UINT16_MAX, 8742, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8744, UINT16_MAX, 8744, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8746, UINT16_MAX, 8746, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8748, UINT16_MAX, 8748, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8750, UINT16_MAX, 8750, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8752, UINT16_MAX, 8752, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8754, UINT16_MAX, 8754, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8756, UINT16_MAX, 8756, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8758, UINT16_MAX, 8758, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8760, UINT16_MAX, 8760, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8762, UINT16_MAX, 8762, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8764, UINT16_MAX, 8764, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8766, UINT16_MAX, 8766, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8768, UINT16_MAX, 8768, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8770, UINT16_MAX, 8770, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8772, UINT16_MAX, 8772, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8774, UINT16_MAX, 8774, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8776, UINT16_MAX, 8776, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8778, UINT16_MAX, 8778, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8780, UINT16_MAX, 8780, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8782, UINT16_MAX, 8782, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8784, UINT16_MAX, 8784, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8786, UINT16_MAX, 8786, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8788, UINT16_MAX, 8788, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8790, UINT16_MAX, 8790, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8792, UINT16_MAX, 8792, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8794, UINT16_MAX, 8794, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8796, UINT16_MAX, 8796, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8798, UINT16_MAX, 8798, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8800, UINT16_MAX, 8800, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8802, UINT16_MAX, 8802, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8804, UINT16_MAX, 8804, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8806, UINT16_MAX, 8806, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8808, UINT16_MAX, 8808, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8810, UINT16_MAX, 8810, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8812, UINT16_MAX, 8812, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8814, UINT16_MAX, 8814, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8816, UINT16_MAX, 8816, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8818, UINT16_MAX, 8818, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8820, UINT16_MAX, 8820, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8822, UINT16_MAX, 8822, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8824, UINT16_MAX, 8824, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8826, UINT16_MAX, 8826, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8828, UINT16_MAX, 8828, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8830, UINT16_MAX, 8830, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8832, UINT16_MAX, 8832, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8834, UINT16_MAX, 8834, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8836, UINT16_MAX, 8836, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8838, UINT16_MAX, 8838, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8840, UINT16_MAX, 8840, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8842, UINT16_MAX, 8842, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8844, UINT16_MAX, 8844, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8846, UINT16_MAX, 8846, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8848, UINT16_MAX, 8848, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8850, UINT16_MAX, 8850, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8852, UINT16_MAX, 8852, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8854, UINT16_MAX, 8854, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8856, UINT16_MAX, 8856, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8858, UINT16_MAX, 8858, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8860, UINT16_MAX, 8860, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8862, UINT16_MAX, 8862, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8864, UINT16_MAX, 8864, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8866, UINT16_MAX, 8866, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8868, UINT16_MAX, 8868, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8870, UINT16_MAX, 8870, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8872, UINT16_MAX, 8872, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8874, UINT16_MAX, 8874, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8876, UINT16_MAX, 8876, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8878, UINT16_MAX, 8878, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8880, UINT16_MAX, 8880, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 928, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 929, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8883, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8885, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8886, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 95, UINT16_MAX, 8887, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1081, UINT16_MAX, 8889, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 601, UINT16_MAX, 8891, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1091, UINT16_MAX, 8893, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6823, UINT16_MAX, 8895, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1093, UINT16_MAX, 8897, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1092, UINT16_MAX, 8899, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 609, UINT16_MAX, 8901, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 610, UINT16_MAX, 8903, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2354, UINT16_MAX, 8905, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1017, UINT16_MAX, 8907, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1023, UINT16_MAX, 8909, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1097, UINT16_MAX, 8911, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6748, UINT16_MAX, 8913, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1027, UINT16_MAX, 8915, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 619, UINT16_MAX, 8917, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1083, UINT16_MAX, 8919, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 357, UINT16_MAX, 8921, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1084, UINT16_MAX, 8923, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1032, UINT16_MAX, 8925, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1061, UINT16_MAX, 8927, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1098, UINT16_MAX, 8929, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1099, UINT16_MAX, 8931, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6721, UINT16_MAX, 8933, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8935, UINT16_MAX, 8937, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6694, UINT16_MAX, 8939, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1039, UINT16_MAX, 8941, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8943, UINT16_MAX, 8945, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1071, UINT16_MAX, 8947, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8949, UINT16_MAX, 8951, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 142, UINT16_MAX, 8953, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1047, UINT16_MAX, 8955, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1048, UINT16_MAX, 8957, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 16, UINT16_MAX, 8959, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1051, UINT16_MAX, 8961, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8963, UINT16_MAX, 8965, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 4666, UINT16_MAX, 8967, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1055, UINT16_MAX, 8969, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 642, UINT16_MAX, 8971, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1096, UINT16_MAX, 8973, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1094, UINT16_MAX, 8975, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6824, UINT16_MAX, 8977, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1095, UINT16_MAX, 8979, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 650, UINT16_MAX, 8981, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 4675, UINT16_MAX, 8983, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1072, UINT16_MAX, 8985, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1089, UINT16_MAX, 8987, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1090, UINT16_MAX, 8989, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1080, UINT16_MAX, 8991, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8993, UINT16_MAX, 8994, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8996, UINT16_MAX, 8997, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8999, UINT16_MAX, 9000, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 9002, UINT16_MAX, 9004, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 9006, UINT16_MAX, 9008, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8888, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8890, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8891, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 95, UINT16_MAX, 8892, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1080, UINT16_MAX, 8894, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 601, UINT16_MAX, 8896, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1090, UINT16_MAX, 8898, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6828, UINT16_MAX, 8900, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1092, UINT16_MAX, 8902, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1091, UINT16_MAX, 8904, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 609, UINT16_MAX, 8906, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 610, UINT16_MAX, 8908, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2354, UINT16_MAX, 8910, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1017, UINT16_MAX, 8912, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1023, UINT16_MAX, 8914, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1096, UINT16_MAX, 8916, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6748, UINT16_MAX, 8918, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1027, UINT16_MAX, 8920, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 619, UINT16_MAX, 8922, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1082, UINT16_MAX, 8924, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 357, UINT16_MAX, 8926, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1083, UINT16_MAX, 8928, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1032, UINT16_MAX, 8930, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1061, UINT16_MAX, 8932, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1097, UINT16_MAX, 8934, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1098, UINT16_MAX, 8936, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6721, UINT16_MAX, 8938, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8940, UINT16_MAX, 8942, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6694, UINT16_MAX, 8944, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1039, UINT16_MAX, 8946, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8948, UINT16_MAX, 8950, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1071, UINT16_MAX, 8952, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8954, UINT16_MAX, 8956, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 142, UINT16_MAX, 8958, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1047, UINT16_MAX, 8960, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1048, UINT16_MAX, 8962, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 16, UINT16_MAX, 8964, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1051, UINT16_MAX, 8966, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8968, UINT16_MAX, 8970, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 4666, UINT16_MAX, 8972, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1055, UINT16_MAX, 8974, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 642, UINT16_MAX, 8976, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1095, UINT16_MAX, 8978, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1093, UINT16_MAX, 8980, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6829, UINT16_MAX, 8982, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1094, UINT16_MAX, 8984, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 650, UINT16_MAX, 8986, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 4675, UINT16_MAX, 8988, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1072, UINT16_MAX, 8990, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1088, UINT16_MAX, 8992, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1089, UINT16_MAX, 8994, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1079, UINT16_MAX, 8996, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8998, UINT16_MAX, 8999, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 9001, UINT16_MAX, 9002, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 9004, UINT16_MAX, 9005, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 9007, UINT16_MAX, 9009, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 9011, UINT16_MAX, 9013, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9010, UINT16_MAX, 9010, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9012, UINT16_MAX, 9012, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9014, UINT16_MAX, 9014, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9016, UINT16_MAX, 9016, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9018, UINT16_MAX, 9018, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9020, UINT16_MAX, 9020, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9022, UINT16_MAX, 9022, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9024, UINT16_MAX, 9024, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9026, UINT16_MAX, 9026, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9028, UINT16_MAX, 9028, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9030, UINT16_MAX, 9030, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9032, UINT16_MAX, 9032, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9034, UINT16_MAX, 9034, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9036, UINT16_MAX, 9036, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9038, UINT16_MAX, 9038, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9040, UINT16_MAX, 9040, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9042, UINT16_MAX, 9042, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9044, UINT16_MAX, 9044, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9046, UINT16_MAX, 9046, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9048, UINT16_MAX, 9048, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9050, UINT16_MAX, 9050, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9052, UINT16_MAX, 9052, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9054, UINT16_MAX, 9054, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9056, UINT16_MAX, 9056, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9058, UINT16_MAX, 9058, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9060, UINT16_MAX, 9060, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9062, UINT16_MAX, 9062, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9064, UINT16_MAX, 9064, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9066, UINT16_MAX, 9066, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9068, UINT16_MAX, 9068, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9070, UINT16_MAX, 9070, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9072, UINT16_MAX, 9072, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9074, UINT16_MAX, 9074, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9076, UINT16_MAX, 9076, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9078, UINT16_MAX, 9078, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9080, UINT16_MAX, 9080, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9082, UINT16_MAX, 9082, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9084, UINT16_MAX, 9084, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9086, UINT16_MAX, 9086, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9088, UINT16_MAX, 9088, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9090, UINT16_MAX, 9090, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9092, UINT16_MAX, 9092, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9094, UINT16_MAX, 9094, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9096, UINT16_MAX, 9096, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9098, UINT16_MAX, 9098, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9100, UINT16_MAX, 9100, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9102, UINT16_MAX, 9102, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9104, UINT16_MAX, 9104, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9106, UINT16_MAX, 9106, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9108, UINT16_MAX, 9108, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9110, UINT16_MAX, 9110, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9112, UINT16_MAX, 9112, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9114, UINT16_MAX, 9114, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9116, UINT16_MAX, 9116, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9118, UINT16_MAX, 9118, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9120, UINT16_MAX, 9120, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9122, UINT16_MAX, 9122, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9124, UINT16_MAX, 9124, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9126, UINT16_MAX, 9126, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9128, UINT16_MAX, 9128, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9130, UINT16_MAX, 9130, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9132, UINT16_MAX, 9132, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9134, UINT16_MAX, 9134, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9136, UINT16_MAX, 9136, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9138, UINT16_MAX, 9138, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9140, UINT16_MAX, 9140, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9142, UINT16_MAX, 9142, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9144, UINT16_MAX, 9144, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9146, UINT16_MAX, 9146, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9148, UINT16_MAX, 9148, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9150, UINT16_MAX, 9150, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9152, UINT16_MAX, 9152, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9154, UINT16_MAX, 9154, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9156, UINT16_MAX, 9156, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9158, UINT16_MAX, 9158, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9160, UINT16_MAX, 9160, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9162, UINT16_MAX, 9162, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9164, UINT16_MAX, 9164, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9166, UINT16_MAX, 9166, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9168, UINT16_MAX, 9168, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9170, UINT16_MAX, 9170, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9172, UINT16_MAX, 9172, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9174, UINT16_MAX, 9174, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9176, UINT16_MAX, 9176, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9178, UINT16_MAX, 9178, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9180, UINT16_MAX, 9180, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9182, UINT16_MAX, 9182, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9184, UINT16_MAX, 9184, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9186, UINT16_MAX, 9186, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9188, UINT16_MAX, 9188, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9190, UINT16_MAX, 9190, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9192, UINT16_MAX, 9192, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9194, UINT16_MAX, 9194, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9196, UINT16_MAX, 9196, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9198, UINT16_MAX, 9198, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9200, UINT16_MAX, 9200, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9202, UINT16_MAX, 9202, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9204, UINT16_MAX, 9204, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9206, UINT16_MAX, 9206, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9208, UINT16_MAX, 9208, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9210, UINT16_MAX, 9210, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9212, UINT16_MAX, 9212, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9214, UINT16_MAX, 9214, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9216, UINT16_MAX, 9216, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9218, UINT16_MAX, 9218, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9220, UINT16_MAX, 9220, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9222, UINT16_MAX, 9222, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9224, UINT16_MAX, 9224, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9226, UINT16_MAX, 9226, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9228, UINT16_MAX, 9228, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9230, UINT16_MAX, 9230, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9232, UINT16_MAX, 9232, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9234, UINT16_MAX, 9234, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9236, UINT16_MAX, 9236, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9238, UINT16_MAX, 9238, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9240, UINT16_MAX, 9240, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9242, UINT16_MAX, 9242, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9244, UINT16_MAX, 9244, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9246, UINT16_MAX, 9246, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9248, UINT16_MAX, 9248, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9250, UINT16_MAX, 9250, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9252, UINT16_MAX, 9252, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9254, UINT16_MAX, 9254, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9256, UINT16_MAX, 9256, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9258, UINT16_MAX, 9258, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9260, UINT16_MAX, 9260, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9262, UINT16_MAX, 9262, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9264, UINT16_MAX, 9264, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9266, UINT16_MAX, 9266, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9268, UINT16_MAX, 9268, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9270, UINT16_MAX, 9270, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9272, UINT16_MAX, 9272, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9274, UINT16_MAX, 9274, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9276, UINT16_MAX, 9276, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9278, UINT16_MAX, 9278, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9280, UINT16_MAX, 9280, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9282, UINT16_MAX, 9282, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9284, UINT16_MAX, 9284, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9286, UINT16_MAX, 9286, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9288, UINT16_MAX, 9288, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9290, UINT16_MAX, 9290, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9292, UINT16_MAX, 9292, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9294, UINT16_MAX, 9294, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9296, UINT16_MAX, 9296, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9298, UINT16_MAX, 9298, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9300, UINT16_MAX, 9300, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9015, UINT16_MAX, 9015, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9017, UINT16_MAX, 9017, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9019, UINT16_MAX, 9019, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9021, UINT16_MAX, 9021, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9023, UINT16_MAX, 9023, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9025, UINT16_MAX, 9025, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9027, UINT16_MAX, 9027, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9029, UINT16_MAX, 9029, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9031, UINT16_MAX, 9031, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9033, UINT16_MAX, 9033, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9035, UINT16_MAX, 9035, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9037, UINT16_MAX, 9037, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9039, UINT16_MAX, 9039, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9041, UINT16_MAX, 9041, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9043, UINT16_MAX, 9043, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9045, UINT16_MAX, 9045, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9047, UINT16_MAX, 9047, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9049, UINT16_MAX, 9049, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9051, UINT16_MAX, 9051, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9053, UINT16_MAX, 9053, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9055, UINT16_MAX, 9055, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9057, UINT16_MAX, 9057, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9059, UINT16_MAX, 9059, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9061, UINT16_MAX, 9061, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9063, UINT16_MAX, 9063, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9065, UINT16_MAX, 9065, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9067, UINT16_MAX, 9067, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9069, UINT16_MAX, 9069, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9071, UINT16_MAX, 9071, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9073, UINT16_MAX, 9073, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9075, UINT16_MAX, 9075, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9077, UINT16_MAX, 9077, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9079, UINT16_MAX, 9079, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9081, UINT16_MAX, 9081, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9083, UINT16_MAX, 9083, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9085, UINT16_MAX, 9085, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9087, UINT16_MAX, 9087, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9089, UINT16_MAX, 9089, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9091, UINT16_MAX, 9091, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9093, UINT16_MAX, 9093, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9095, UINT16_MAX, 9095, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9097, UINT16_MAX, 9097, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9099, UINT16_MAX, 9099, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9101, UINT16_MAX, 9101, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9103, UINT16_MAX, 9103, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9105, UINT16_MAX, 9105, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9107, UINT16_MAX, 9107, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9109, UINT16_MAX, 9109, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9111, UINT16_MAX, 9111, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9113, UINT16_MAX, 9113, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9115, UINT16_MAX, 9115, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9117, UINT16_MAX, 9117, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9119, UINT16_MAX, 9119, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9121, UINT16_MAX, 9121, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9123, UINT16_MAX, 9123, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9125, UINT16_MAX, 9125, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9127, UINT16_MAX, 9127, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9129, UINT16_MAX, 9129, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9131, UINT16_MAX, 9131, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9133, UINT16_MAX, 9133, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9135, UINT16_MAX, 9135, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9137, UINT16_MAX, 9137, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9139, UINT16_MAX, 9139, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9141, UINT16_MAX, 9141, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9143, UINT16_MAX, 9143, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9145, UINT16_MAX, 9145, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9147, UINT16_MAX, 9147, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9149, UINT16_MAX, 9149, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9151, UINT16_MAX, 9151, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9153, UINT16_MAX, 9153, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9155, UINT16_MAX, 9155, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9157, UINT16_MAX, 9157, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9159, UINT16_MAX, 9159, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9161, UINT16_MAX, 9161, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9163, UINT16_MAX, 9163, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9165, UINT16_MAX, 9165, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9167, UINT16_MAX, 9167, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9169, UINT16_MAX, 9169, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9171, UINT16_MAX, 9171, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9173, UINT16_MAX, 9173, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9175, UINT16_MAX, 9175, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9177, UINT16_MAX, 9177, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9179, UINT16_MAX, 9179, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9181, UINT16_MAX, 9181, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9183, UINT16_MAX, 9183, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9185, UINT16_MAX, 9185, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9187, UINT16_MAX, 9187, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9189, UINT16_MAX, 9189, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9191, UINT16_MAX, 9191, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9193, UINT16_MAX, 9193, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9195, UINT16_MAX, 9195, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9197, UINT16_MAX, 9197, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9199, UINT16_MAX, 9199, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9201, UINT16_MAX, 9201, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9203, UINT16_MAX, 9203, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9205, UINT16_MAX, 9205, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9207, UINT16_MAX, 9207, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9209, UINT16_MAX, 9209, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9211, UINT16_MAX, 9211, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9213, UINT16_MAX, 9213, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9215, UINT16_MAX, 9215, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9217, UINT16_MAX, 9217, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9219, UINT16_MAX, 9219, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9221, UINT16_MAX, 9221, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9223, UINT16_MAX, 9223, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9225, UINT16_MAX, 9225, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9227, UINT16_MAX, 9227, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9229, UINT16_MAX, 9229, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9231, UINT16_MAX, 9231, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9233, UINT16_MAX, 9233, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9235, UINT16_MAX, 9235, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9237, UINT16_MAX, 9237, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9239, UINT16_MAX, 9239, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9241, UINT16_MAX, 9241, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9243, UINT16_MAX, 9243, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9245, UINT16_MAX, 9245, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9247, UINT16_MAX, 9247, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9249, UINT16_MAX, 9249, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9251, UINT16_MAX, 9251, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9253, UINT16_MAX, 9253, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9255, UINT16_MAX, 9255, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9257, UINT16_MAX, 9257, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9259, UINT16_MAX, 9259, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9261, UINT16_MAX, 9261, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9263, UINT16_MAX, 9263, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9265, UINT16_MAX, 9265, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9267, UINT16_MAX, 9267, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9269, UINT16_MAX, 9269, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9271, UINT16_MAX, 9271, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9273, UINT16_MAX, 9273, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9275, UINT16_MAX, 9275, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9277, UINT16_MAX, 9277, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9279, UINT16_MAX, 9279, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9281, UINT16_MAX, 9281, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9283, UINT16_MAX, 9283, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9285, UINT16_MAX, 9285, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9287, UINT16_MAX, 9287, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9289, UINT16_MAX, 9289, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9291, UINT16_MAX, 9291, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9293, UINT16_MAX, 9293, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9295, UINT16_MAX, 9295, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9297, UINT16_MAX, 9297, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9299, UINT16_MAX, 9299, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9301, UINT16_MAX, 9301, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9303, UINT16_MAX, 9303, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9305, UINT16_MAX, 9305, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_AN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 930, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25686, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25691, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 931, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25690, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25695, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 932, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25694, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25699, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, true, 0, false, 0, UTF8PROC_BOUNDCLASS_PREPEND, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25698, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
- {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25702, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
+ {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25703, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
+ {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25707, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
{UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 933, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
{UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 934, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
{UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 935, 2, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25706, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25710, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 937, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25714, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 938, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25718, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 939, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25722, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 940, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25726, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25711, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25715, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 937, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25719, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 938, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25723, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 939, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25727, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 940, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25731, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},
{UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 941, 3, true, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
- {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25730, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
- {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25734, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
- {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25738, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
+ {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25735, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
+ {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
+ {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25743, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
{UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 944, 3, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25746, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25750, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25751, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25755, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 947, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 948, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25754, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9378, UINT16_MAX, 9378, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9380, UINT16_MAX, 9380, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9382, UINT16_MAX, 9382, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9384, UINT16_MAX, 9384, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9386, UINT16_MAX, 9386, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9388, UINT16_MAX, 9388, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9390, UINT16_MAX, 9390, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9392, UINT16_MAX, 9392, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9394, UINT16_MAX, 9394, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9396, UINT16_MAX, 9396, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9398, UINT16_MAX, 9398, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9400, UINT16_MAX, 9400, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9402, UINT16_MAX, 9402, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9404, UINT16_MAX, 9404, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9406, UINT16_MAX, 9406, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9408, UINT16_MAX, 9408, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9410, UINT16_MAX, 9410, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9412, UINT16_MAX, 9412, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9414, UINT16_MAX, 9414, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9416, UINT16_MAX, 9416, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9418, UINT16_MAX, 9418, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9420, UINT16_MAX, 9420, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9422, UINT16_MAX, 9422, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9424, UINT16_MAX, 9424, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9426, UINT16_MAX, 9426, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9428, UINT16_MAX, 9428, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9430, UINT16_MAX, 9430, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9432, UINT16_MAX, 9432, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9434, UINT16_MAX, 9434, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9436, UINT16_MAX, 9436, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9438, UINT16_MAX, 9438, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9440, UINT16_MAX, 9440, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9442, UINT16_MAX, 9442, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9444, UINT16_MAX, 9444, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9446, UINT16_MAX, 9446, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9448, UINT16_MAX, 9448, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9450, UINT16_MAX, 9450, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9452, UINT16_MAX, 9452, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9454, UINT16_MAX, 9454, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9456, UINT16_MAX, 9456, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9458, UINT16_MAX, 9458, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9460, UINT16_MAX, 9460, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9462, UINT16_MAX, 9462, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9464, UINT16_MAX, 9464, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9466, UINT16_MAX, 9466, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9468, UINT16_MAX, 9468, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9470, UINT16_MAX, 9470, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9472, UINT16_MAX, 9472, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9474, UINT16_MAX, 9474, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9476, UINT16_MAX, 9476, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9478, UINT16_MAX, 9478, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9480, UINT16_MAX, 9480, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9482, UINT16_MAX, 9482, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9484, UINT16_MAX, 9484, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9486, UINT16_MAX, 9486, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9488, UINT16_MAX, 9488, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9490, UINT16_MAX, 9490, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9492, UINT16_MAX, 9492, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9494, UINT16_MAX, 9494, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9496, UINT16_MAX, 9496, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9498, UINT16_MAX, 9498, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9500, UINT16_MAX, 9500, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9502, UINT16_MAX, 9502, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9504, UINT16_MAX, 9504, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25759, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25763, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9383, UINT16_MAX, 9383, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9385, UINT16_MAX, 9385, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9387, UINT16_MAX, 9387, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9389, UINT16_MAX, 9389, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9391, UINT16_MAX, 9391, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9393, UINT16_MAX, 9393, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9395, UINT16_MAX, 9395, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9397, UINT16_MAX, 9397, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9399, UINT16_MAX, 9399, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9401, UINT16_MAX, 9401, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9403, UINT16_MAX, 9403, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9405, UINT16_MAX, 9405, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9407, UINT16_MAX, 9407, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9409, UINT16_MAX, 9409, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9411, UINT16_MAX, 9411, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9413, UINT16_MAX, 9413, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9415, UINT16_MAX, 9415, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9417, UINT16_MAX, 9417, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9419, UINT16_MAX, 9419, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9421, UINT16_MAX, 9421, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9423, UINT16_MAX, 9423, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9425, UINT16_MAX, 9425, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9427, UINT16_MAX, 9427, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9429, UINT16_MAX, 9429, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9431, UINT16_MAX, 9431, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9433, UINT16_MAX, 9433, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9435, UINT16_MAX, 9435, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9437, UINT16_MAX, 9437, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9439, UINT16_MAX, 9439, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9441, UINT16_MAX, 9441, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9443, UINT16_MAX, 9443, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9445, UINT16_MAX, 9445, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9447, UINT16_MAX, 9447, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9449, UINT16_MAX, 9449, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9451, UINT16_MAX, 9451, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9453, UINT16_MAX, 9453, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9455, UINT16_MAX, 9455, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9457, UINT16_MAX, 9457, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9459, UINT16_MAX, 9459, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9461, UINT16_MAX, 9461, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9463, UINT16_MAX, 9463, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9465, UINT16_MAX, 9465, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9467, UINT16_MAX, 9467, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9469, UINT16_MAX, 9469, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9471, UINT16_MAX, 9471, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9473, UINT16_MAX, 9473, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9475, UINT16_MAX, 9475, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9477, UINT16_MAX, 9477, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9479, UINT16_MAX, 9479, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9481, UINT16_MAX, 9481, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9483, UINT16_MAX, 9483, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9485, UINT16_MAX, 9485, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9487, UINT16_MAX, 9487, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9489, UINT16_MAX, 9489, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9491, UINT16_MAX, 9491, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9493, UINT16_MAX, 9493, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9495, UINT16_MAX, 9495, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9497, UINT16_MAX, 9497, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9499, UINT16_MAX, 9499, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9501, UINT16_MAX, 9501, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9503, UINT16_MAX, 9503, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9505, UINT16_MAX, 9505, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9507, UINT16_MAX, 9507, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9509, UINT16_MAX, 9509, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 949, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25890, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25895, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
{UTF8PROC_CATEGORY_MN, 9, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
{UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 950, 4, true, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
- {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25894, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 954, 2, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
- {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25898, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 956, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
- {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25902, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
- {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25906, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
- {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25910, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
- {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25914, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
- {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25918, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
- {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25922, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
+ {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25899, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 954, 2, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
+ {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25903, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 956, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
+ {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25907, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
+ {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25911, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
+ {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
+ {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25919, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
+ {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25923, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
+ {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25927, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
{UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 957, 1, true, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 958, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_V, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 959, 1, true, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_V, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25926, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_V, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25930, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 960, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_V, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25934, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_V, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9554, UINT16_MAX, 9554, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9556, UINT16_MAX, 9556, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9558, UINT16_MAX, 9558, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9560, UINT16_MAX, 9560, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9562, UINT16_MAX, 9562, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9564, UINT16_MAX, 9564, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9566, UINT16_MAX, 9566, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9568, UINT16_MAX, 9568, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9570, UINT16_MAX, 9570, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9572, UINT16_MAX, 9572, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9574, UINT16_MAX, 9574, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9576, UINT16_MAX, 9576, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9578, UINT16_MAX, 9578, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9580, UINT16_MAX, 9580, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9582, UINT16_MAX, 9582, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9584, UINT16_MAX, 9584, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9586, UINT16_MAX, 9586, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9588, UINT16_MAX, 9588, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9590, UINT16_MAX, 9590, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9592, UINT16_MAX, 9592, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9594, UINT16_MAX, 9594, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9596, UINT16_MAX, 9596, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9598, UINT16_MAX, 9598, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9600, UINT16_MAX, 9600, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9602, UINT16_MAX, 9602, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9604, UINT16_MAX, 9604, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9606, UINT16_MAX, 9606, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9608, UINT16_MAX, 9608, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9610, UINT16_MAX, 9610, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9612, UINT16_MAX, 9612, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9614, UINT16_MAX, 9614, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9616, UINT16_MAX, 9616, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9618, UINT16_MAX, 9618, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9620, UINT16_MAX, 9620, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9622, UINT16_MAX, 9622, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9624, UINT16_MAX, 9624, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9626, UINT16_MAX, 9626, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9628, UINT16_MAX, 9628, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9630, UINT16_MAX, 9630, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9632, UINT16_MAX, 9632, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9634, UINT16_MAX, 9634, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9636, UINT16_MAX, 9636, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9638, UINT16_MAX, 9638, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9640, UINT16_MAX, 9640, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9642, UINT16_MAX, 9642, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9644, UINT16_MAX, 9644, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9646, UINT16_MAX, 9646, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9648, UINT16_MAX, 9648, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9650, UINT16_MAX, 9650, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9652, UINT16_MAX, 9652, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9654, UINT16_MAX, 9654, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9656, UINT16_MAX, 9656, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9658, UINT16_MAX, 9658, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9660, UINT16_MAX, 9660, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9662, UINT16_MAX, 9662, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9664, UINT16_MAX, 9664, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9666, UINT16_MAX, 9666, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9668, UINT16_MAX, 9668, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9670, UINT16_MAX, 9670, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9672, UINT16_MAX, 9672, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9674, UINT16_MAX, 9674, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9676, UINT16_MAX, 9676, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9678, UINT16_MAX, 9678, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9680, UINT16_MAX, 9680, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25931, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_V, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 960, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_V, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_V, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9559, UINT16_MAX, 9559, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9561, UINT16_MAX, 9561, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9563, UINT16_MAX, 9563, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9565, UINT16_MAX, 9565, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9567, UINT16_MAX, 9567, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9569, UINT16_MAX, 9569, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9571, UINT16_MAX, 9571, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9573, UINT16_MAX, 9573, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9575, UINT16_MAX, 9575, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9577, UINT16_MAX, 9577, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9579, UINT16_MAX, 9579, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9581, UINT16_MAX, 9581, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9583, UINT16_MAX, 9583, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9585, UINT16_MAX, 9585, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9587, UINT16_MAX, 9587, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9589, UINT16_MAX, 9589, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9591, UINT16_MAX, 9591, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9593, UINT16_MAX, 9593, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9595, UINT16_MAX, 9595, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9597, UINT16_MAX, 9597, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9599, UINT16_MAX, 9599, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9601, UINT16_MAX, 9601, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9603, UINT16_MAX, 9603, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9605, UINT16_MAX, 9605, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9607, UINT16_MAX, 9607, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9609, UINT16_MAX, 9609, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9611, UINT16_MAX, 9611, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9613, UINT16_MAX, 9613, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9615, UINT16_MAX, 9615, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9617, UINT16_MAX, 9617, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9619, UINT16_MAX, 9619, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9621, UINT16_MAX, 9621, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9623, UINT16_MAX, 9623, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9625, UINT16_MAX, 9625, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9627, UINT16_MAX, 9627, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9629, UINT16_MAX, 9629, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9631, UINT16_MAX, 9631, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9633, UINT16_MAX, 9633, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9635, UINT16_MAX, 9635, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9637, UINT16_MAX, 9637, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9639, UINT16_MAX, 9639, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9641, UINT16_MAX, 9641, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9643, UINT16_MAX, 9643, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9645, UINT16_MAX, 9645, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9647, UINT16_MAX, 9647, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9649, UINT16_MAX, 9649, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9651, UINT16_MAX, 9651, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9653, UINT16_MAX, 9653, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9655, UINT16_MAX, 9655, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9657, UINT16_MAX, 9657, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9659, UINT16_MAX, 9659, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9661, UINT16_MAX, 9661, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9663, UINT16_MAX, 9663, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9665, UINT16_MAX, 9665, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9667, UINT16_MAX, 9667, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9669, UINT16_MAX, 9669, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9671, UINT16_MAX, 9671, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9673, UINT16_MAX, 9673, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9675, UINT16_MAX, 9675, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9677, UINT16_MAX, 9677, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9679, UINT16_MAX, 9679, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9681, UINT16_MAX, 9681, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9683, UINT16_MAX, 9683, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9685, UINT16_MAX, 9685, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9687, UINT16_MAX, 9687, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9689, UINT16_MAX, 9689, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9691, UINT16_MAX, 9691, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9693, UINT16_MAX, 9693, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9695, UINT16_MAX, 9695, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9697, UINT16_MAX, 9697, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9699, UINT16_MAX, 9699, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9701, UINT16_MAX, 9701, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9703, UINT16_MAX, 9703, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9705, UINT16_MAX, 9705, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9707, UINT16_MAX, 9707, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9709, UINT16_MAX, 9709, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9711, UINT16_MAX, 9711, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9713, UINT16_MAX, 9713, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9715, UINT16_MAX, 9715, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9717, UINT16_MAX, 9717, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9719, UINT16_MAX, 9719, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9721, UINT16_MAX, 9721, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9723, UINT16_MAX, 9723, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9725, UINT16_MAX, 9725, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9727, UINT16_MAX, 9727, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9729, UINT16_MAX, 9729, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9731, UINT16_MAX, 9731, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9733, UINT16_MAX, 9733, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9735, UINT16_MAX, 9735, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9737, UINT16_MAX, 9737, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9739, UINT16_MAX, 9739, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9741, UINT16_MAX, 9741, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9743, UINT16_MAX, 9743, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9745, UINT16_MAX, 9745, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9747, UINT16_MAX, 9747, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9749, UINT16_MAX, 9749, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9751, UINT16_MAX, 9751, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9753, UINT16_MAX, 9753, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9755, UINT16_MAX, 9755, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9757, UINT16_MAX, 9757, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9759, UINT16_MAX, 9759, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9761, UINT16_MAX, 9761, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9763, UINT16_MAX, 9763, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9765, UINT16_MAX, 9765, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9767, UINT16_MAX, 9767, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9769, UINT16_MAX, 9769, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9771, UINT16_MAX, 9771, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9773, UINT16_MAX, 9773, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9775, UINT16_MAX, 9775, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9777, UINT16_MAX, 9777, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9779, UINT16_MAX, 9779, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9781, UINT16_MAX, 9781, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9783, UINT16_MAX, 9783, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9785, UINT16_MAX, 9785, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_MC, 6, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -14492,1492 +14527,1397 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 3936, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 3937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 3938, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26066, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26070, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26074, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26078, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26082, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26086, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26090, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26171, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26175, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26179, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26183, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26187, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26191, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26195, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
{UTF8PROC_CATEGORY_MC, 226, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26094, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26098, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26102, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26106, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26110, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26114, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26199, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26203, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26207, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26211, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26215, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26219, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 9734, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 9736, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 9738, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 9740, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 9742, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 9744, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 9746, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 9748, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 9750, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 9752, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 9754, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 9756, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 9758, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 9760, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 9762, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 9764, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 9766, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 9768, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 9770, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 9772, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 9774, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 9776, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 9778, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 9780, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 9782, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 9784, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 9786, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 9788, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 9790, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 9792, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 9794, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 9796, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 9798, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 9800, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 9802, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 9804, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 9806, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 9808, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 9810, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 9812, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 9814, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 9816, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 9818, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 9820, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 9822, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 9824, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 9826, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 9828, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 9830, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 9832, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 9834, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 9836, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 9838, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 9840, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 9842, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 9844, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 9846, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 9848, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 9850, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 9852, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 9854, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 9856, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 9858, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 9860, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 9862, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 9864, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 9866, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 9868, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 9870, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 9872, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 9874, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 9876, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 9878, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 9880, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 9882, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 9884, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 9886, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 9888, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 9890, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 9892, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 9894, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 9896, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 9898, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 9900, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 9902, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 9904, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 9906, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 9908, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 9910, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 9912, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 9914, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 9916, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 9918, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 9920, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 9922, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 9924, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 9926, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 9928, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 9930, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 9932, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 9934, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 9936, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 9938, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 9940, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 9942, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 9944, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 9946, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 9948, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 9950, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 9952, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 9954, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 9956, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 9958, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 9960, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 9962, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 9964, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 9966, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 9968, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 9970, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 9972, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 9974, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 9976, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 9978, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 9980, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 9982, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 9984, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 9986, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 9988, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 9990, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 9992, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 9994, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 9996, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 9998, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10000, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10002, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10004, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10006, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10008, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10010, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10012, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10014, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10016, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10018, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10020, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10022, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10024, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10026, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10028, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10030, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10032, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10034, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10036, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10038, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10040, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10042, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10044, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10046, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10048, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10050, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10052, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10054, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10056, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10058, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10060, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10062, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10064, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10066, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10068, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10070, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10072, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10074, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10076, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10078, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10080, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10082, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10084, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10086, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10088, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10090, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10092, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10094, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10096, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10098, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10100, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10102, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10104, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10106, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10108, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10110, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10112, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10114, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10116, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10118, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10120, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10122, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10124, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10126, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10128, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10130, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10132, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10134, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10136, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10138, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 10140, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10142, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10144, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10146, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10148, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10150, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10152, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10154, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10156, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10158, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 10160, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10162, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10164, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10166, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10168, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10170, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10172, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10174, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10176, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10178, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10180, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10182, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10184, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10186, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10188, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10190, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10192, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10194, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10196, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10198, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10200, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10202, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10204, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10206, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10208, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10210, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10212, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10214, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10216, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10218, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10220, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10222, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10224, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10226, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10228, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10230, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10232, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10234, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10236, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10238, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10240, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10242, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10244, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10246, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10248, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10250, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10252, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10254, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10256, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10258, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10260, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10262, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10264, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10266, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10268, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10270, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10272, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10274, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10276, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10278, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10280, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10282, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10284, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10286, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10288, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10290, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10292, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10294, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10296, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10298, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10300, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10302, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10304, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10306, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10308, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10310, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10312, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10314, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10316, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10318, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10320, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10322, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10324, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10326, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10328, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10330, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10332, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10334, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10336, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10338, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10340, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10342, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10344, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10346, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10348, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10350, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10352, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10354, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10356, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10358, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10360, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10362, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10364, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10366, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10368, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10370, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10372, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10374, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10376, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10378, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10380, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10382, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10384, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10386, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10388, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10390, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10392, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10394, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10396, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10398, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10400, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10402, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10404, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10406, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10408, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10410, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10412, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10414, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10416, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10418, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10420, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10422, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10424, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10426, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 10428, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10430, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10432, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10434, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10436, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10438, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10440, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10442, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10444, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10446, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 10448, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10450, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10452, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10454, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10456, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10458, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10460, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10462, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10464, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10466, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10468, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10470, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10472, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10474, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10476, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10478, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10480, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10482, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10484, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10486, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10488, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10490, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10492, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10494, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10496, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10498, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10500, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10502, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10504, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10506, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10508, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10510, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10512, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10514, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10516, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10518, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10520, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10522, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10524, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10526, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10528, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10530, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 10532, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10534, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10536, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10538, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10540, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10542, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10544, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10546, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10548, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10550, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 10552, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10554, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10556, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10558, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10560, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10562, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10564, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10566, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10568, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10570, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10572, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10574, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10576, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10578, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10580, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10582, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10584, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10586, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10588, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10590, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10592, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10594, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10596, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10598, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10600, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10602, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10604, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10606, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10608, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10610, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10612, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10614, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10616, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10618, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10620, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10622, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10624, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10626, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10628, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10630, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10632, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10634, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 10636, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10638, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10640, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10642, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10644, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10646, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10648, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10650, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10652, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10654, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 10656, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10658, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10660, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10662, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10664, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10666, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10668, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10670, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10672, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10674, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10676, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10678, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10680, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10682, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10684, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10686, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10688, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10690, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10692, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10694, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10696, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10698, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10700, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10702, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10704, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10706, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10708, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10710, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10712, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10714, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10716, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10718, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10720, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10722, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10724, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10726, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10728, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10730, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10732, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10734, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10736, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10738, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 10740, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10742, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10744, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10746, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10748, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10750, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10752, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10754, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10756, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10758, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 10760, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10762, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10764, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10766, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10768, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10770, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10772, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10774, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10776, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10778, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10780, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10782, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10784, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10786, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10788, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10790, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10792, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10794, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10796, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10798, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10800, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10802, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10804, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10806, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10808, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10810, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10812, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10814, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10816, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10818, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10820, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10822, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10824, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10826, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10828, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10830, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10832, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10834, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10836, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10838, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10840, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10842, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 10844, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10846, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10848, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10850, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10852, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10854, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10856, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10858, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10860, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10862, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 10864, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10866, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10868, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10870, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10872, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10874, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10876, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10878, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10880, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10882, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10884, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10886, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10888, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10890, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10892, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10894, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10896, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10898, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10900, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10902, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10904, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10906, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10908, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10910, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10912, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10914, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10916, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10918, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10920, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10922, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10924, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10926, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10928, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10930, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10932, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10934, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10936, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10938, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10940, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10942, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10944, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10946, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 10948, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10950, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10952, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10954, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10956, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10958, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10960, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10962, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10964, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10966, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 10968, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10970, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10972, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10974, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10976, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10978, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10980, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10982, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10984, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10986, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10988, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10990, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10992, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10994, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10996, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10998, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 11000, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 11002, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 11004, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 11006, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 11008, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 11010, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 11012, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 11014, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 11016, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 11018, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 11020, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 11022, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 11024, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 11026, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 11028, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 11030, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 11032, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 11034, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 11036, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11038, UINT16_MAX, 11039, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 984, UINT16_MAX, 11041, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1231, UINT16_MAX, UINT16_MAX, 11043, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1232, UINT16_MAX, UINT16_MAX, 11045, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1233, UINT16_MAX, UINT16_MAX, 11047, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1234, UINT16_MAX, UINT16_MAX, 11049, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1235, UINT16_MAX, UINT16_MAX, 11051, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1236, UINT16_MAX, UINT16_MAX, 11053, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1237, UINT16_MAX, UINT16_MAX, 11055, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1238, UINT16_MAX, UINT16_MAX, 11057, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1139, UINT16_MAX, UINT16_MAX, 11059, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1239, UINT16_MAX, UINT16_MAX, 11061, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1240, UINT16_MAX, UINT16_MAX, 11063, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 63, UINT16_MAX, UINT16_MAX, 11065, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1241, UINT16_MAX, UINT16_MAX, 11067, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1242, UINT16_MAX, UINT16_MAX, 11069, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1243, UINT16_MAX, UINT16_MAX, 11071, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1244, UINT16_MAX, UINT16_MAX, 11073, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1245, UINT16_MAX, UINT16_MAX, 11075, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11077, UINT16_MAX, UINT16_MAX, 11078, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1246, UINT16_MAX, UINT16_MAX, 11080, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1247, UINT16_MAX, UINT16_MAX, 11082, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1248, UINT16_MAX, UINT16_MAX, 11084, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1249, UINT16_MAX, UINT16_MAX, 11086, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1250, UINT16_MAX, UINT16_MAX, 11088, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1251, UINT16_MAX, UINT16_MAX, 11090, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1252, UINT16_MAX, UINT16_MAX, 11092, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FONT, 11094, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1185, UINT16_MAX, 11095, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1186, UINT16_MAX, 11097, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1187, UINT16_MAX, 11099, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1188, UINT16_MAX, 11101, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1189, UINT16_MAX, 11103, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1190, UINT16_MAX, 11105, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1191, UINT16_MAX, 11107, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1192, UINT16_MAX, 11109, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1138, UINT16_MAX, 11111, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1193, UINT16_MAX, 11113, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1194, UINT16_MAX, 11115, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 62, UINT16_MAX, 11117, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1195, UINT16_MAX, 11119, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1196, UINT16_MAX, 11121, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1197, UINT16_MAX, 11123, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1198, UINT16_MAX, 11125, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1199, UINT16_MAX, 11127, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1301, UINT16_MAX, 11129, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1200, UINT16_MAX, 11131, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1201, UINT16_MAX, 11133, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1202, UINT16_MAX, 11135, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1203, UINT16_MAX, 11137, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1204, UINT16_MAX, 11139, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1205, UINT16_MAX, 11141, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1206, UINT16_MAX, 11143, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FONT, 11145, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11146, UINT16_MAX, 11147, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11149, UINT16_MAX, 11150, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11152, UINT16_MAX, 11153, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11155, UINT16_MAX, 11156, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11158, UINT16_MAX, 11159, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11161, UINT16_MAX, 11162, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1231, UINT16_MAX, UINT16_MAX, 11164, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1232, UINT16_MAX, UINT16_MAX, 11166, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1233, UINT16_MAX, UINT16_MAX, 11168, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1234, UINT16_MAX, UINT16_MAX, 11170, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1235, UINT16_MAX, UINT16_MAX, 11172, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1236, UINT16_MAX, UINT16_MAX, 11174, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1237, UINT16_MAX, UINT16_MAX, 11176, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1238, UINT16_MAX, UINT16_MAX, 11178, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1139, UINT16_MAX, UINT16_MAX, 11180, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1239, UINT16_MAX, UINT16_MAX, 11182, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1240, UINT16_MAX, UINT16_MAX, 11184, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 63, UINT16_MAX, UINT16_MAX, 11186, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1241, UINT16_MAX, UINT16_MAX, 11188, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1242, UINT16_MAX, UINT16_MAX, 11190, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1243, UINT16_MAX, UINT16_MAX, 11192, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1244, UINT16_MAX, UINT16_MAX, 11194, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1245, UINT16_MAX, UINT16_MAX, 11196, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11077, UINT16_MAX, UINT16_MAX, 11198, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1246, UINT16_MAX, UINT16_MAX, 11200, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1247, UINT16_MAX, UINT16_MAX, 11202, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1248, UINT16_MAX, UINT16_MAX, 11204, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1249, UINT16_MAX, UINT16_MAX, 11206, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1250, UINT16_MAX, UINT16_MAX, 11208, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1251, UINT16_MAX, UINT16_MAX, 11210, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1252, UINT16_MAX, UINT16_MAX, 11212, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1185, UINT16_MAX, 11214, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1186, UINT16_MAX, 11216, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1187, UINT16_MAX, 11218, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1188, UINT16_MAX, 11220, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1189, UINT16_MAX, 11222, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1190, UINT16_MAX, 11224, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1191, UINT16_MAX, 11226, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1192, UINT16_MAX, 11228, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1138, UINT16_MAX, 11230, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1193, UINT16_MAX, 11232, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1194, UINT16_MAX, 11234, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 62, UINT16_MAX, 11236, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1195, UINT16_MAX, 11238, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1196, UINT16_MAX, 11240, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1197, UINT16_MAX, 11242, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1198, UINT16_MAX, 11244, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1199, UINT16_MAX, 11246, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1301, UINT16_MAX, 11248, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1200, UINT16_MAX, 11250, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1201, UINT16_MAX, 11252, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1202, UINT16_MAX, 11254, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1203, UINT16_MAX, 11256, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1204, UINT16_MAX, 11258, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1205, UINT16_MAX, 11260, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1206, UINT16_MAX, 11262, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11146, UINT16_MAX, 11264, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11149, UINT16_MAX, 11266, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11152, UINT16_MAX, 11268, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11155, UINT16_MAX, 11270, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11158, UINT16_MAX, 11272, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11161, UINT16_MAX, 11274, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1231, UINT16_MAX, UINT16_MAX, 11276, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1232, UINT16_MAX, UINT16_MAX, 11278, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1233, UINT16_MAX, UINT16_MAX, 11280, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1234, UINT16_MAX, UINT16_MAX, 11282, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1235, UINT16_MAX, UINT16_MAX, 11284, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1236, UINT16_MAX, UINT16_MAX, 11286, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1237, UINT16_MAX, UINT16_MAX, 11288, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1238, UINT16_MAX, UINT16_MAX, 11290, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1139, UINT16_MAX, UINT16_MAX, 11292, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1239, UINT16_MAX, UINT16_MAX, 11294, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1240, UINT16_MAX, UINT16_MAX, 11296, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 63, UINT16_MAX, UINT16_MAX, 11298, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1241, UINT16_MAX, UINT16_MAX, 11300, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1242, UINT16_MAX, UINT16_MAX, 11302, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1243, UINT16_MAX, UINT16_MAX, 11304, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1244, UINT16_MAX, UINT16_MAX, 11306, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1245, UINT16_MAX, UINT16_MAX, 11308, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11077, UINT16_MAX, UINT16_MAX, 11310, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1246, UINT16_MAX, UINT16_MAX, 11312, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1247, UINT16_MAX, UINT16_MAX, 11314, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1248, UINT16_MAX, UINT16_MAX, 11316, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1249, UINT16_MAX, UINT16_MAX, 11318, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1250, UINT16_MAX, UINT16_MAX, 11320, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1251, UINT16_MAX, UINT16_MAX, 11322, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1252, UINT16_MAX, UINT16_MAX, 11324, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1185, UINT16_MAX, 11326, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1186, UINT16_MAX, 11328, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1187, UINT16_MAX, 11330, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1188, UINT16_MAX, 11332, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1189, UINT16_MAX, 11334, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1190, UINT16_MAX, 11336, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1191, UINT16_MAX, 11338, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1192, UINT16_MAX, 11340, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1138, UINT16_MAX, 11342, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1193, UINT16_MAX, 11344, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1194, UINT16_MAX, 11346, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 62, UINT16_MAX, 11348, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1195, UINT16_MAX, 11350, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1196, UINT16_MAX, 11352, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1197, UINT16_MAX, 11354, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1198, UINT16_MAX, 11356, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1199, UINT16_MAX, 11358, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1301, UINT16_MAX, 11360, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1200, UINT16_MAX, 11362, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1201, UINT16_MAX, 11364, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1202, UINT16_MAX, 11366, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1203, UINT16_MAX, 11368, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1204, UINT16_MAX, 11370, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1205, UINT16_MAX, 11372, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1206, UINT16_MAX, 11374, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11146, UINT16_MAX, 11376, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11149, UINT16_MAX, 11378, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11152, UINT16_MAX, 11380, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11155, UINT16_MAX, 11382, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11158, UINT16_MAX, 11384, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11161, UINT16_MAX, 11386, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1231, UINT16_MAX, UINT16_MAX, 11388, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1232, UINT16_MAX, UINT16_MAX, 11390, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1233, UINT16_MAX, UINT16_MAX, 11392, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1234, UINT16_MAX, UINT16_MAX, 11394, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1235, UINT16_MAX, UINT16_MAX, 11396, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1236, UINT16_MAX, UINT16_MAX, 11398, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1237, UINT16_MAX, UINT16_MAX, 11400, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1238, UINT16_MAX, UINT16_MAX, 11402, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1139, UINT16_MAX, UINT16_MAX, 11404, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1239, UINT16_MAX, UINT16_MAX, 11406, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1240, UINT16_MAX, UINT16_MAX, 11408, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 63, UINT16_MAX, UINT16_MAX, 11410, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1241, UINT16_MAX, UINT16_MAX, 11412, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1242, UINT16_MAX, UINT16_MAX, 11414, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1243, UINT16_MAX, UINT16_MAX, 11416, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1244, UINT16_MAX, UINT16_MAX, 11418, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1245, UINT16_MAX, UINT16_MAX, 11420, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11077, UINT16_MAX, UINT16_MAX, 11422, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1246, UINT16_MAX, UINT16_MAX, 11424, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1247, UINT16_MAX, UINT16_MAX, 11426, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1248, UINT16_MAX, UINT16_MAX, 11428, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1249, UINT16_MAX, UINT16_MAX, 11430, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1250, UINT16_MAX, UINT16_MAX, 11432, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1251, UINT16_MAX, UINT16_MAX, 11434, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1252, UINT16_MAX, UINT16_MAX, 11436, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1185, UINT16_MAX, 11438, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1186, UINT16_MAX, 11440, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1187, UINT16_MAX, 11442, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1188, UINT16_MAX, 11444, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1189, UINT16_MAX, 11446, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1190, UINT16_MAX, 11448, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1191, UINT16_MAX, 11450, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1192, UINT16_MAX, 11452, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1138, UINT16_MAX, 11454, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1193, UINT16_MAX, 11456, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1194, UINT16_MAX, 11458, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 62, UINT16_MAX, 11460, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1195, UINT16_MAX, 11462, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1196, UINT16_MAX, 11464, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1197, UINT16_MAX, 11466, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1198, UINT16_MAX, 11468, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1199, UINT16_MAX, 11470, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1301, UINT16_MAX, 11472, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1200, UINT16_MAX, 11474, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1201, UINT16_MAX, 11476, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1202, UINT16_MAX, 11478, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1203, UINT16_MAX, 11480, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1204, UINT16_MAX, 11482, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1205, UINT16_MAX, 11484, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1206, UINT16_MAX, 11486, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11146, UINT16_MAX, 11488, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11149, UINT16_MAX, 11490, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11152, UINT16_MAX, 11492, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11155, UINT16_MAX, 11494, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11158, UINT16_MAX, 11496, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11161, UINT16_MAX, 11498, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1231, UINT16_MAX, UINT16_MAX, 11500, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1232, UINT16_MAX, UINT16_MAX, 11502, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1233, UINT16_MAX, UINT16_MAX, 11504, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1234, UINT16_MAX, UINT16_MAX, 11506, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1235, UINT16_MAX, UINT16_MAX, 11508, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1236, UINT16_MAX, UINT16_MAX, 11510, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1237, UINT16_MAX, UINT16_MAX, 11512, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1238, UINT16_MAX, UINT16_MAX, 11514, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1139, UINT16_MAX, UINT16_MAX, 11516, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1239, UINT16_MAX, UINT16_MAX, 11518, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1240, UINT16_MAX, UINT16_MAX, 11520, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 63, UINT16_MAX, UINT16_MAX, 11522, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1241, UINT16_MAX, UINT16_MAX, 11524, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1242, UINT16_MAX, UINT16_MAX, 11526, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1243, UINT16_MAX, UINT16_MAX, 11528, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1244, UINT16_MAX, UINT16_MAX, 11530, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1245, UINT16_MAX, UINT16_MAX, 11532, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11077, UINT16_MAX, UINT16_MAX, 11534, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1246, UINT16_MAX, UINT16_MAX, 11536, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1247, UINT16_MAX, UINT16_MAX, 11538, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1248, UINT16_MAX, UINT16_MAX, 11540, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1249, UINT16_MAX, UINT16_MAX, 11542, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1250, UINT16_MAX, UINT16_MAX, 11544, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1251, UINT16_MAX, UINT16_MAX, 11546, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1252, UINT16_MAX, UINT16_MAX, 11548, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1185, UINT16_MAX, 11550, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1186, UINT16_MAX, 11552, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1187, UINT16_MAX, 11554, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1188, UINT16_MAX, 11556, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1189, UINT16_MAX, 11558, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1190, UINT16_MAX, 11560, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1191, UINT16_MAX, 11562, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1192, UINT16_MAX, 11564, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1138, UINT16_MAX, 11566, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1193, UINT16_MAX, 11568, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1194, UINT16_MAX, 11570, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 62, UINT16_MAX, 11572, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1195, UINT16_MAX, 11574, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1196, UINT16_MAX, 11576, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1197, UINT16_MAX, 11578, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1198, UINT16_MAX, 11580, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1199, UINT16_MAX, 11582, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1301, UINT16_MAX, 11584, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1200, UINT16_MAX, 11586, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1201, UINT16_MAX, 11588, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1202, UINT16_MAX, 11590, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1203, UINT16_MAX, 11592, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1204, UINT16_MAX, 11594, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1205, UINT16_MAX, 11596, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1206, UINT16_MAX, 11598, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11146, UINT16_MAX, 11600, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11149, UINT16_MAX, 11602, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11152, UINT16_MAX, 11604, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11155, UINT16_MAX, 11606, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11158, UINT16_MAX, 11608, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11161, UINT16_MAX, 11610, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1282, UINT16_MAX, UINT16_MAX, 11612, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1281, UINT16_MAX, 11614, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11616, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11618, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11620, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11622, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8935, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8943, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8949, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11624, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8963, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11626, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11628, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11630, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11632, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11634, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11636, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11638, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11640, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11642, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11644, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11646, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11648, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11650, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11652, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11654, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11656, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11658, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11660, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11662, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11664, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9006, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11666, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11668, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11670, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11672, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11674, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11676, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1343, UINT16_MAX, 11678, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1344, UINT16_MAX, 11680, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1345, UINT16_MAX, 11682, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1346, UINT16_MAX, 11684, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1347, UINT16_MAX, 11686, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1348, UINT16_MAX, 11688, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1349, UINT16_MAX, 11690, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1350, UINT16_MAX, 11692, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1351, UINT16_MAX, 11694, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1355, UINT16_MAX, 11696, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1356, UINT16_MAX, 11698, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1357, UINT16_MAX, 11700, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1359, UINT16_MAX, 11702, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1360, UINT16_MAX, 11704, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1361, UINT16_MAX, 11706, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1362, UINT16_MAX, 11708, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1363, UINT16_MAX, 11710, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1364, UINT16_MAX, 11712, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1365, UINT16_MAX, 11714, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1366, UINT16_MAX, 11716, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1367, UINT16_MAX, 11718, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1368, UINT16_MAX, 11720, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1369, UINT16_MAX, 11722, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1372, UINT16_MAX, 11724, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1374, UINT16_MAX, 11726, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1375, UINT16_MAX, 11728, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6568, UINT16_MAX, 11730, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1573, UINT16_MAX, 11732, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1325, UINT16_MAX, 11734, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1329, UINT16_MAX, 11736, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1613, UINT16_MAX, 11738, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1515, UINT16_MAX, 11740, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1533, UINT16_MAX, 11742, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1343, UINT16_MAX, 11744, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1344, UINT16_MAX, 11746, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1345, UINT16_MAX, 11748, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1346, UINT16_MAX, 11750, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1347, UINT16_MAX, 11752, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1348, UINT16_MAX, 11754, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1349, UINT16_MAX, 11756, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1350, UINT16_MAX, 11758, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1351, UINT16_MAX, 11760, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1355, UINT16_MAX, 11762, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1356, UINT16_MAX, 11764, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1359, UINT16_MAX, 11766, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1360, UINT16_MAX, 11768, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1362, UINT16_MAX, 11770, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1364, UINT16_MAX, 11772, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1365, UINT16_MAX, 11774, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1366, UINT16_MAX, 11776, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1367, UINT16_MAX, 11778, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1368, UINT16_MAX, 11780, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1369, UINT16_MAX, 11782, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1371, UINT16_MAX, 11784, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1372, UINT16_MAX, 11786, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1485, UINT16_MAX, 11788, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1325, UINT16_MAX, 11790, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1324, UINT16_MAX, 11792, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1342, UINT16_MAX, 11794, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1511, UINT16_MAX, 11796, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6530, UINT16_MAX, 11798, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1517, UINT16_MAX, 11800, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11802, UINT16_MAX, 11802, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11804, UINT16_MAX, 11804, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11806, UINT16_MAX, 11806, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11808, UINT16_MAX, 11808, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11810, UINT16_MAX, 11810, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11812, UINT16_MAX, 11812, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11814, UINT16_MAX, 11814, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11816, UINT16_MAX, 11816, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11818, UINT16_MAX, 11818, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11820, UINT16_MAX, 11820, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11822, UINT16_MAX, 11822, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11824, UINT16_MAX, 11824, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11826, UINT16_MAX, 11826, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11828, UINT16_MAX, 11828, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11830, UINT16_MAX, 11830, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11832, UINT16_MAX, 11832, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11834, UINT16_MAX, 11834, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11836, UINT16_MAX, 11836, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11838, UINT16_MAX, 11838, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11840, UINT16_MAX, 11840, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11842, UINT16_MAX, 11842, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11844, UINT16_MAX, 11844, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11846, UINT16_MAX, 11846, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11848, UINT16_MAX, 11848, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11850, UINT16_MAX, 11850, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11852, UINT16_MAX, 11852, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11854, UINT16_MAX, 11854, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11856, UINT16_MAX, 11856, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11858, UINT16_MAX, 11858, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11860, UINT16_MAX, 11860, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11862, UINT16_MAX, 11862, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11864, UINT16_MAX, 11864, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11866, UINT16_MAX, 11866, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11868, UINT16_MAX, 11868, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11870, UINT16_MAX, 11870, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11872, UINT16_MAX, 11872, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11874, UINT16_MAX, 11874, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11876, UINT16_MAX, 11876, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11878, UINT16_MAX, 11878, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11880, UINT16_MAX, 11880, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11882, UINT16_MAX, 11882, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11884, UINT16_MAX, 11884, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11886, UINT16_MAX, 11886, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11888, UINT16_MAX, 11888, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11890, UINT16_MAX, 11890, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11892, UINT16_MAX, 11892, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11894, UINT16_MAX, 11894, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11896, UINT16_MAX, 11896, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11898, UINT16_MAX, 11898, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11900, UINT16_MAX, 11900, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11902, UINT16_MAX, 11902, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11904, UINT16_MAX, 11904, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11906, UINT16_MAX, 11906, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11908, UINT16_MAX, 11908, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11910, UINT16_MAX, 11910, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11912, UINT16_MAX, 11912, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11914, UINT16_MAX, 11914, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11916, UINT16_MAX, 11916, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11918, UINT16_MAX, 11918, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11920, UINT16_MAX, 11920, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11922, UINT16_MAX, 11922, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11924, UINT16_MAX, 11924, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11926, UINT16_MAX, 11926, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11928, UINT16_MAX, 11928, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11930, UINT16_MAX, 11930, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11932, UINT16_MAX, 11932, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11934, UINT16_MAX, 11934, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11936, UINT16_MAX, 11936, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8256, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8257, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 9839, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 9841, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 9843, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 9845, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 9847, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 9849, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 9851, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 9853, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 9855, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 9857, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 9859, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 9861, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 9863, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 9865, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 9867, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 9869, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 9871, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 9873, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 9875, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 9877, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 9879, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 9881, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 9883, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 9885, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 9887, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 9889, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 9891, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 9893, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 9895, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 9897, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 9899, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 9901, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 9903, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 9905, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 9907, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 9909, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 9911, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 9913, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 9915, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 9917, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 9919, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 9921, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 9923, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 9925, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 9927, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 9929, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 9931, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 9933, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 9935, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 9937, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 9939, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 9941, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 9943, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 9945, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 9947, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 9949, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 9951, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 9953, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 9955, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 9957, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 9959, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 9961, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 9963, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 9965, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 9967, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 9969, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 9971, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 9973, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 9975, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 9977, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 9979, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 9981, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 9983, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 9985, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 9987, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 9989, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 9991, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 9993, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 9995, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 9997, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 9999, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10001, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10003, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10005, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10007, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10009, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10011, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10013, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10015, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10017, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10019, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10021, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10023, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10025, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10027, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10029, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10031, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10033, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10035, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10037, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10039, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10041, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10043, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10045, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10047, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10049, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10051, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10053, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10055, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10057, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 10059, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10061, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10063, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10065, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10067, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10069, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10071, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10073, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10075, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10077, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 10079, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10081, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10083, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10085, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10087, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10089, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10091, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10093, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10095, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10097, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10099, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10101, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10103, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10105, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10107, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10109, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10111, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10113, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10115, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10117, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10119, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10121, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10123, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10125, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10127, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10129, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10131, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10133, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10135, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10137, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10139, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10141, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10143, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10145, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10147, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10149, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10151, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10153, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10155, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10157, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10159, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10161, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10163, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10165, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10167, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10169, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10171, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10173, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10175, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10177, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10179, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10181, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10183, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10185, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10187, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10189, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10191, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10193, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10195, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10197, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10199, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10201, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10203, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10205, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10207, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10209, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10211, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10213, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10215, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10217, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10219, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10221, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10223, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10225, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10227, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10229, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10231, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10233, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10235, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10237, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10239, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10241, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10243, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 10245, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10247, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10249, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10251, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10253, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10255, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10257, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10259, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10261, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10263, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 10265, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10267, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10269, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10271, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10273, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10275, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10277, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10279, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10281, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10283, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10285, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10287, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10289, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10291, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10293, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10295, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10297, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10299, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10301, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10303, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10305, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10307, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10309, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10311, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10313, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10315, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10317, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10319, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10321, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10323, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10325, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10327, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10329, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10331, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10333, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10335, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10337, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10339, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10341, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10343, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10345, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10347, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10349, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10351, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10353, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10355, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10357, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10359, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10361, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10363, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10365, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10367, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10369, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10371, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10373, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10375, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10377, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10379, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10381, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10383, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10385, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10387, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10389, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10391, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10393, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10395, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10397, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10399, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10401, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10403, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10405, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10407, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10409, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10411, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10413, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10415, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10417, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10419, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10421, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10423, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10425, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10427, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10429, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10431, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10433, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10435, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10437, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10439, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10441, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10443, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10445, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10447, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10449, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10451, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10453, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10455, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10457, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10459, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10461, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10463, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10465, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10467, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10469, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10471, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10473, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10475, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10477, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10479, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10481, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10483, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10485, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10487, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10489, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10491, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10493, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10495, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10497, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10499, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10501, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10503, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10505, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10507, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10509, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10511, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10513, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10515, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10517, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10519, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10521, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10523, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10525, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10527, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10529, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10531, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 10533, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10535, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10537, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10539, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10541, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10543, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10545, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10547, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10549, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10551, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 10553, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10555, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10557, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10559, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10561, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10563, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10565, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10567, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10569, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10571, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10573, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10575, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10577, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10579, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10581, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10583, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10585, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10587, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10589, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10591, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10593, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10595, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10597, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10599, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10601, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10603, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10605, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10607, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10609, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10611, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10613, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10615, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10617, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10619, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10621, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10623, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10625, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10627, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10629, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10631, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10633, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10635, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 10637, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10639, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10641, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10643, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10645, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10647, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10649, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10651, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10653, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10655, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 10657, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10659, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10661, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10663, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10665, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10667, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10669, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10671, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10673, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10675, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10677, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10679, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10681, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10683, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10685, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10687, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10689, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10691, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10693, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10695, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10697, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10699, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10701, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10703, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10705, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10707, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10709, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10711, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10713, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10715, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10717, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10719, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10721, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10723, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10725, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10727, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10729, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10731, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10733, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10735, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10737, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10739, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 10741, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10743, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10745, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10747, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10749, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10751, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10753, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10755, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10757, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10759, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 10761, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10763, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10765, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10767, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10769, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10771, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10773, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10775, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10777, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10779, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10781, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10783, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10785, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10787, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10789, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10791, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10793, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10795, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10797, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10799, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10801, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10803, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10805, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10807, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10809, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10811, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10813, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10815, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10817, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10819, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10821, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10823, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10825, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10827, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10829, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10831, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10833, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10835, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10837, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10839, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10841, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10843, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 10845, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10847, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10849, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10851, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10853, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10855, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10857, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10859, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10861, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10863, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 10865, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10867, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10869, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10871, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10873, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10875, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10877, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10879, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10881, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10883, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10885, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10887, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10889, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10891, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10893, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10895, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10897, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10899, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10901, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10903, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10905, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10907, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10909, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10911, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10913, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10915, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10917, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10919, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10921, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10923, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10925, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10927, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10929, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10931, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10933, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10935, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10937, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10939, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10941, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10943, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10945, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10947, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 10949, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10951, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10953, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10955, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10957, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10959, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10961, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10963, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10965, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10967, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 10969, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10971, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10973, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10975, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10977, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10979, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10981, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10983, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10985, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10987, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10989, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10991, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10993, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10995, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10997, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10999, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 11001, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 11003, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 11005, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 11007, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 11009, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 11011, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 11013, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 11015, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 11017, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 11019, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 11021, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 11023, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 11025, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 11027, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 11029, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 11031, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 11033, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 11035, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 11037, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 11039, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 11041, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 11043, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 11045, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 11047, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 11049, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 11051, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 11053, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 11055, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 11057, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 11059, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 11061, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 11063, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 11065, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 11067, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 11069, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 11071, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 11073, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 11075, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 11077, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 11079, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 11081, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 11083, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 11085, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 11087, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 11089, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 11091, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 11093, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 11095, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 11097, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 11099, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 11101, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 11103, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 11105, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 11107, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 11109, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 11111, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 11113, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 11115, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 11117, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 11119, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 11121, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 11123, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 11125, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 11127, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 11129, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 11131, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 11133, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 11135, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 11137, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 11139, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 11141, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11143, UINT16_MAX, 11144, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 984, UINT16_MAX, 11146, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1231, UINT16_MAX, UINT16_MAX, 11148, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1232, UINT16_MAX, UINT16_MAX, 11150, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1233, UINT16_MAX, UINT16_MAX, 11152, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1234, UINT16_MAX, UINT16_MAX, 11154, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1235, UINT16_MAX, UINT16_MAX, 11156, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1236, UINT16_MAX, UINT16_MAX, 11158, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1237, UINT16_MAX, UINT16_MAX, 11160, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1238, UINT16_MAX, UINT16_MAX, 11162, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1139, UINT16_MAX, UINT16_MAX, 11164, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1239, UINT16_MAX, UINT16_MAX, 11166, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1240, UINT16_MAX, UINT16_MAX, 11168, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 63, UINT16_MAX, UINT16_MAX, 11170, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1241, UINT16_MAX, UINT16_MAX, 11172, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1242, UINT16_MAX, UINT16_MAX, 11174, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1243, UINT16_MAX, UINT16_MAX, 11176, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1244, UINT16_MAX, UINT16_MAX, 11178, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1245, UINT16_MAX, UINT16_MAX, 11180, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11182, UINT16_MAX, UINT16_MAX, 11183, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1246, UINT16_MAX, UINT16_MAX, 11185, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1247, UINT16_MAX, UINT16_MAX, 11187, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1248, UINT16_MAX, UINT16_MAX, 11189, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1249, UINT16_MAX, UINT16_MAX, 11191, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1250, UINT16_MAX, UINT16_MAX, 11193, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1251, UINT16_MAX, UINT16_MAX, 11195, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1252, UINT16_MAX, UINT16_MAX, 11197, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FONT, 11199, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1185, UINT16_MAX, 11200, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1186, UINT16_MAX, 11202, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1187, UINT16_MAX, 11204, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1188, UINT16_MAX, 11206, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1189, UINT16_MAX, 11208, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1190, UINT16_MAX, 11210, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1191, UINT16_MAX, 11212, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1192, UINT16_MAX, 11214, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1138, UINT16_MAX, 11216, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1193, UINT16_MAX, 11218, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1194, UINT16_MAX, 11220, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 62, UINT16_MAX, 11222, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1195, UINT16_MAX, 11224, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1196, UINT16_MAX, 11226, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1197, UINT16_MAX, 11228, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1198, UINT16_MAX, 11230, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1199, UINT16_MAX, 11232, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1301, UINT16_MAX, 11234, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1200, UINT16_MAX, 11236, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1201, UINT16_MAX, 11238, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1202, UINT16_MAX, 11240, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1203, UINT16_MAX, 11242, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1204, UINT16_MAX, 11244, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1205, UINT16_MAX, 11246, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1206, UINT16_MAX, 11248, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FONT, 11250, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11251, UINT16_MAX, 11252, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11254, UINT16_MAX, 11255, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11257, UINT16_MAX, 11258, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11260, UINT16_MAX, 11261, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11263, UINT16_MAX, 11264, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11266, UINT16_MAX, 11267, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1231, UINT16_MAX, UINT16_MAX, 11269, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1232, UINT16_MAX, UINT16_MAX, 11271, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1233, UINT16_MAX, UINT16_MAX, 11273, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1234, UINT16_MAX, UINT16_MAX, 11275, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1235, UINT16_MAX, UINT16_MAX, 11277, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1236, UINT16_MAX, UINT16_MAX, 11279, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1237, UINT16_MAX, UINT16_MAX, 11281, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1238, UINT16_MAX, UINT16_MAX, 11283, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1139, UINT16_MAX, UINT16_MAX, 11285, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1239, UINT16_MAX, UINT16_MAX, 11287, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1240, UINT16_MAX, UINT16_MAX, 11289, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 63, UINT16_MAX, UINT16_MAX, 11291, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1241, UINT16_MAX, UINT16_MAX, 11293, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1242, UINT16_MAX, UINT16_MAX, 11295, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1243, UINT16_MAX, UINT16_MAX, 11297, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1244, UINT16_MAX, UINT16_MAX, 11299, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1245, UINT16_MAX, UINT16_MAX, 11301, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11182, UINT16_MAX, UINT16_MAX, 11303, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1246, UINT16_MAX, UINT16_MAX, 11305, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1247, UINT16_MAX, UINT16_MAX, 11307, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1248, UINT16_MAX, UINT16_MAX, 11309, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1249, UINT16_MAX, UINT16_MAX, 11311, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1250, UINT16_MAX, UINT16_MAX, 11313, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1251, UINT16_MAX, UINT16_MAX, 11315, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1252, UINT16_MAX, UINT16_MAX, 11317, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1185, UINT16_MAX, 11319, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1186, UINT16_MAX, 11321, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1187, UINT16_MAX, 11323, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1188, UINT16_MAX, 11325, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1189, UINT16_MAX, 11327, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1190, UINT16_MAX, 11329, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1191, UINT16_MAX, 11331, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1192, UINT16_MAX, 11333, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1138, UINT16_MAX, 11335, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1193, UINT16_MAX, 11337, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1194, UINT16_MAX, 11339, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 62, UINT16_MAX, 11341, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1195, UINT16_MAX, 11343, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1196, UINT16_MAX, 11345, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1197, UINT16_MAX, 11347, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1198, UINT16_MAX, 11349, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1199, UINT16_MAX, 11351, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1301, UINT16_MAX, 11353, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1200, UINT16_MAX, 11355, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1201, UINT16_MAX, 11357, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1202, UINT16_MAX, 11359, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1203, UINT16_MAX, 11361, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1204, UINT16_MAX, 11363, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1205, UINT16_MAX, 11365, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1206, UINT16_MAX, 11367, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11251, UINT16_MAX, 11369, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11254, UINT16_MAX, 11371, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11257, UINT16_MAX, 11373, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11260, UINT16_MAX, 11375, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11263, UINT16_MAX, 11377, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11266, UINT16_MAX, 11379, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1231, UINT16_MAX, UINT16_MAX, 11381, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1232, UINT16_MAX, UINT16_MAX, 11383, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1233, UINT16_MAX, UINT16_MAX, 11385, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1234, UINT16_MAX, UINT16_MAX, 11387, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1235, UINT16_MAX, UINT16_MAX, 11389, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1236, UINT16_MAX, UINT16_MAX, 11391, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1237, UINT16_MAX, UINT16_MAX, 11393, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1238, UINT16_MAX, UINT16_MAX, 11395, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1139, UINT16_MAX, UINT16_MAX, 11397, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1239, UINT16_MAX, UINT16_MAX, 11399, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1240, UINT16_MAX, UINT16_MAX, 11401, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 63, UINT16_MAX, UINT16_MAX, 11403, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1241, UINT16_MAX, UINT16_MAX, 11405, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1242, UINT16_MAX, UINT16_MAX, 11407, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1243, UINT16_MAX, UINT16_MAX, 11409, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1244, UINT16_MAX, UINT16_MAX, 11411, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1245, UINT16_MAX, UINT16_MAX, 11413, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11182, UINT16_MAX, UINT16_MAX, 11415, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1246, UINT16_MAX, UINT16_MAX, 11417, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1247, UINT16_MAX, UINT16_MAX, 11419, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1248, UINT16_MAX, UINT16_MAX, 11421, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1249, UINT16_MAX, UINT16_MAX, 11423, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1250, UINT16_MAX, UINT16_MAX, 11425, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1251, UINT16_MAX, UINT16_MAX, 11427, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1252, UINT16_MAX, UINT16_MAX, 11429, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1185, UINT16_MAX, 11431, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1186, UINT16_MAX, 11433, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1187, UINT16_MAX, 11435, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1188, UINT16_MAX, 11437, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1189, UINT16_MAX, 11439, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1190, UINT16_MAX, 11441, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1191, UINT16_MAX, 11443, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1192, UINT16_MAX, 11445, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1138, UINT16_MAX, 11447, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1193, UINT16_MAX, 11449, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1194, UINT16_MAX, 11451, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 62, UINT16_MAX, 11453, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1195, UINT16_MAX, 11455, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1196, UINT16_MAX, 11457, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1197, UINT16_MAX, 11459, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1198, UINT16_MAX, 11461, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1199, UINT16_MAX, 11463, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1301, UINT16_MAX, 11465, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1200, UINT16_MAX, 11467, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1201, UINT16_MAX, 11469, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1202, UINT16_MAX, 11471, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1203, UINT16_MAX, 11473, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1204, UINT16_MAX, 11475, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1205, UINT16_MAX, 11477, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1206, UINT16_MAX, 11479, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11251, UINT16_MAX, 11481, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11254, UINT16_MAX, 11483, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11257, UINT16_MAX, 11485, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11260, UINT16_MAX, 11487, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11263, UINT16_MAX, 11489, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11266, UINT16_MAX, 11491, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1231, UINT16_MAX, UINT16_MAX, 11493, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1232, UINT16_MAX, UINT16_MAX, 11495, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1233, UINT16_MAX, UINT16_MAX, 11497, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1234, UINT16_MAX, UINT16_MAX, 11499, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1235, UINT16_MAX, UINT16_MAX, 11501, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1236, UINT16_MAX, UINT16_MAX, 11503, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1237, UINT16_MAX, UINT16_MAX, 11505, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1238, UINT16_MAX, UINT16_MAX, 11507, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1139, UINT16_MAX, UINT16_MAX, 11509, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1239, UINT16_MAX, UINT16_MAX, 11511, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1240, UINT16_MAX, UINT16_MAX, 11513, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 63, UINT16_MAX, UINT16_MAX, 11515, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1241, UINT16_MAX, UINT16_MAX, 11517, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1242, UINT16_MAX, UINT16_MAX, 11519, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1243, UINT16_MAX, UINT16_MAX, 11521, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1244, UINT16_MAX, UINT16_MAX, 11523, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1245, UINT16_MAX, UINT16_MAX, 11525, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11182, UINT16_MAX, UINT16_MAX, 11527, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1246, UINT16_MAX, UINT16_MAX, 11529, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1247, UINT16_MAX, UINT16_MAX, 11531, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1248, UINT16_MAX, UINT16_MAX, 11533, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1249, UINT16_MAX, UINT16_MAX, 11535, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1250, UINT16_MAX, UINT16_MAX, 11537, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1251, UINT16_MAX, UINT16_MAX, 11539, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1252, UINT16_MAX, UINT16_MAX, 11541, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1185, UINT16_MAX, 11543, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1186, UINT16_MAX, 11545, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1187, UINT16_MAX, 11547, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1188, UINT16_MAX, 11549, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1189, UINT16_MAX, 11551, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1190, UINT16_MAX, 11553, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1191, UINT16_MAX, 11555, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1192, UINT16_MAX, 11557, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1138, UINT16_MAX, 11559, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1193, UINT16_MAX, 11561, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1194, UINT16_MAX, 11563, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 62, UINT16_MAX, 11565, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1195, UINT16_MAX, 11567, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1196, UINT16_MAX, 11569, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1197, UINT16_MAX, 11571, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1198, UINT16_MAX, 11573, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1199, UINT16_MAX, 11575, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1301, UINT16_MAX, 11577, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1200, UINT16_MAX, 11579, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1201, UINT16_MAX, 11581, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1202, UINT16_MAX, 11583, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1203, UINT16_MAX, 11585, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1204, UINT16_MAX, 11587, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1205, UINT16_MAX, 11589, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1206, UINT16_MAX, 11591, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11251, UINT16_MAX, 11593, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11254, UINT16_MAX, 11595, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11257, UINT16_MAX, 11597, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11260, UINT16_MAX, 11599, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11263, UINT16_MAX, 11601, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11266, UINT16_MAX, 11603, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1231, UINT16_MAX, UINT16_MAX, 11605, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1232, UINT16_MAX, UINT16_MAX, 11607, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1233, UINT16_MAX, UINT16_MAX, 11609, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1234, UINT16_MAX, UINT16_MAX, 11611, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1235, UINT16_MAX, UINT16_MAX, 11613, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1236, UINT16_MAX, UINT16_MAX, 11615, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1237, UINT16_MAX, UINT16_MAX, 11617, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1238, UINT16_MAX, UINT16_MAX, 11619, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1139, UINT16_MAX, UINT16_MAX, 11621, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1239, UINT16_MAX, UINT16_MAX, 11623, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1240, UINT16_MAX, UINT16_MAX, 11625, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 63, UINT16_MAX, UINT16_MAX, 11627, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1241, UINT16_MAX, UINT16_MAX, 11629, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1242, UINT16_MAX, UINT16_MAX, 11631, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1243, UINT16_MAX, UINT16_MAX, 11633, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1244, UINT16_MAX, UINT16_MAX, 11635, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1245, UINT16_MAX, UINT16_MAX, 11637, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11182, UINT16_MAX, UINT16_MAX, 11639, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1246, UINT16_MAX, UINT16_MAX, 11641, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1247, UINT16_MAX, UINT16_MAX, 11643, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1248, UINT16_MAX, UINT16_MAX, 11645, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1249, UINT16_MAX, UINT16_MAX, 11647, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1250, UINT16_MAX, UINT16_MAX, 11649, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1251, UINT16_MAX, UINT16_MAX, 11651, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1252, UINT16_MAX, UINT16_MAX, 11653, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1185, UINT16_MAX, 11655, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1186, UINT16_MAX, 11657, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1187, UINT16_MAX, 11659, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1188, UINT16_MAX, 11661, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1189, UINT16_MAX, 11663, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1190, UINT16_MAX, 11665, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1191, UINT16_MAX, 11667, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1192, UINT16_MAX, 11669, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1138, UINT16_MAX, 11671, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1193, UINT16_MAX, 11673, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1194, UINT16_MAX, 11675, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 62, UINT16_MAX, 11677, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1195, UINT16_MAX, 11679, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1196, UINT16_MAX, 11681, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1197, UINT16_MAX, 11683, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1198, UINT16_MAX, 11685, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1199, UINT16_MAX, 11687, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1301, UINT16_MAX, 11689, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1200, UINT16_MAX, 11691, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1201, UINT16_MAX, 11693, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1202, UINT16_MAX, 11695, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1203, UINT16_MAX, 11697, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1204, UINT16_MAX, 11699, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1205, UINT16_MAX, 11701, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1206, UINT16_MAX, 11703, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11251, UINT16_MAX, 11705, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11254, UINT16_MAX, 11707, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11257, UINT16_MAX, 11709, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11260, UINT16_MAX, 11711, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11263, UINT16_MAX, 11713, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11266, UINT16_MAX, 11715, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1282, UINT16_MAX, UINT16_MAX, 11717, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1281, UINT16_MAX, 11719, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11721, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11723, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11725, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11727, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8940, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8948, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8954, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11729, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8968, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11731, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11733, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11735, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11737, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11739, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11741, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11743, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11745, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11747, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11749, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11751, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11753, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11755, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11757, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11759, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11761, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11763, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11765, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11767, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11769, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9011, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11771, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11773, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11775, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11777, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11779, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11781, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1343, UINT16_MAX, 11783, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1344, UINT16_MAX, 11785, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1345, UINT16_MAX, 11787, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1346, UINT16_MAX, 11789, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1347, UINT16_MAX, 11791, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1348, UINT16_MAX, 11793, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1349, UINT16_MAX, 11795, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1350, UINT16_MAX, 11797, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1351, UINT16_MAX, 11799, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1355, UINT16_MAX, 11801, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1356, UINT16_MAX, 11803, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1357, UINT16_MAX, 11805, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1359, UINT16_MAX, 11807, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1360, UINT16_MAX, 11809, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1361, UINT16_MAX, 11811, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1362, UINT16_MAX, 11813, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1363, UINT16_MAX, 11815, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1364, UINT16_MAX, 11817, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1365, UINT16_MAX, 11819, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1366, UINT16_MAX, 11821, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1367, UINT16_MAX, 11823, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1368, UINT16_MAX, 11825, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1369, UINT16_MAX, 11827, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1372, UINT16_MAX, 11829, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1374, UINT16_MAX, 11831, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1375, UINT16_MAX, 11833, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6568, UINT16_MAX, 11835, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1573, UINT16_MAX, 11837, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1325, UINT16_MAX, 11839, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1329, UINT16_MAX, 11841, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1613, UINT16_MAX, 11843, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1515, UINT16_MAX, 11845, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1533, UINT16_MAX, 11847, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1343, UINT16_MAX, 11849, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1344, UINT16_MAX, 11851, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1345, UINT16_MAX, 11853, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1346, UINT16_MAX, 11855, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1347, UINT16_MAX, 11857, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1348, UINT16_MAX, 11859, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1349, UINT16_MAX, 11861, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1350, UINT16_MAX, 11863, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1351, UINT16_MAX, 11865, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1355, UINT16_MAX, 11867, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1356, UINT16_MAX, 11869, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1359, UINT16_MAX, 11871, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1360, UINT16_MAX, 11873, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1362, UINT16_MAX, 11875, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1364, UINT16_MAX, 11877, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1365, UINT16_MAX, 11879, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1366, UINT16_MAX, 11881, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1367, UINT16_MAX, 11883, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1368, UINT16_MAX, 11885, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1369, UINT16_MAX, 11887, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1371, UINT16_MAX, 11889, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1372, UINT16_MAX, 11891, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1485, UINT16_MAX, 11893, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1325, UINT16_MAX, 11895, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1324, UINT16_MAX, 11897, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1342, UINT16_MAX, 11899, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1511, UINT16_MAX, 11901, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6530, UINT16_MAX, 11903, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1517, UINT16_MAX, 11905, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11907, UINT16_MAX, 11907, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11909, UINT16_MAX, 11909, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11911, UINT16_MAX, 11911, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11913, UINT16_MAX, 11913, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11915, UINT16_MAX, 11915, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11917, UINT16_MAX, 11917, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11919, UINT16_MAX, 11919, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11921, UINT16_MAX, 11921, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11923, UINT16_MAX, 11923, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11925, UINT16_MAX, 11925, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11927, UINT16_MAX, 11927, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11929, UINT16_MAX, 11929, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11931, UINT16_MAX, 11931, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11933, UINT16_MAX, 11933, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11935, UINT16_MAX, 11935, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11937, UINT16_MAX, 11937, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11939, UINT16_MAX, 11939, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11941, UINT16_MAX, 11941, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11943, UINT16_MAX, 11943, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11945, UINT16_MAX, 11945, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11947, UINT16_MAX, 11947, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11949, UINT16_MAX, 11949, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11951, UINT16_MAX, 11951, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11953, UINT16_MAX, 11953, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11955, UINT16_MAX, 11955, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11957, UINT16_MAX, 11957, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11959, UINT16_MAX, 11959, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11961, UINT16_MAX, 11961, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11963, UINT16_MAX, 11963, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11965, UINT16_MAX, 11965, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11967, UINT16_MAX, 11967, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11969, UINT16_MAX, 11969, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11971, UINT16_MAX, 11971, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11973, UINT16_MAX, 11973, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11975, UINT16_MAX, 11975, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11977, UINT16_MAX, 11977, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11979, UINT16_MAX, 11979, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11981, UINT16_MAX, 11981, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11983, UINT16_MAX, 11983, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11985, UINT16_MAX, 11985, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11987, UINT16_MAX, 11987, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11989, UINT16_MAX, 11989, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11991, UINT16_MAX, 11991, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11993, UINT16_MAX, 11993, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11995, UINT16_MAX, 11995, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11997, UINT16_MAX, 11997, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11999, UINT16_MAX, 11999, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12001, UINT16_MAX, 12001, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12003, UINT16_MAX, 12003, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12005, UINT16_MAX, 12005, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12007, UINT16_MAX, 12007, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12009, UINT16_MAX, 12009, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12011, UINT16_MAX, 12011, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12013, UINT16_MAX, 12013, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12015, UINT16_MAX, 12015, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12017, UINT16_MAX, 12017, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12019, UINT16_MAX, 12019, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12021, UINT16_MAX, 12021, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12023, UINT16_MAX, 12023, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12025, UINT16_MAX, 12025, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12027, UINT16_MAX, 12027, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12029, UINT16_MAX, 12029, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12031, UINT16_MAX, 12031, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12033, UINT16_MAX, 12033, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12035, UINT16_MAX, 12035, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12037, UINT16_MAX, 12037, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12039, UINT16_MAX, 12039, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12041, UINT16_MAX, 12041, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8261, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8262, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8288, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8272, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8289, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8284, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8286, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8280, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8281, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8268, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8274, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8276, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8259, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 11938, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 7458, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 11939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 11940, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8282, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28325, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28327, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28329, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28331, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28333, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28335, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28337, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28339, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28341, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28343, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28345, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44731, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44734, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44737, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44740, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44743, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44746, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44749, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44752, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44755, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44761, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44764, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44770, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44773, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44776, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44779, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44782, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44785, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44788, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44791, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44794, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44797, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44800, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44803, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44806, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44809, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8274, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8268, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8276, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8280, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 12043, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 7463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 12044, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 12045, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8287, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28430, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28432, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28434, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28436, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28438, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28440, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28442, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28444, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44836, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44839, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44842, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44845, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44848, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44851, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44854, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44857, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44860, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44866, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44869, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44872, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44875, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44878, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44881, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44884, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44887, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44890, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44893, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44896, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44899, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44902, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44905, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44908, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44911, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44914, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 28, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 43, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 28428, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 28430, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 26, UINT16_MAX, UINT16_MAX, 12048, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 27, UINT16_MAX, UINT16_MAX, 12050, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28, UINT16_MAX, UINT16_MAX, 12052, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29, UINT16_MAX, UINT16_MAX, 12054, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 30, UINT16_MAX, UINT16_MAX, 12056, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 31, UINT16_MAX, UINT16_MAX, 12058, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 32, UINT16_MAX, UINT16_MAX, 12060, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 33, UINT16_MAX, UINT16_MAX, 12062, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 34, UINT16_MAX, UINT16_MAX, 12064, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 35, UINT16_MAX, UINT16_MAX, 12066, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 36, UINT16_MAX, UINT16_MAX, 12068, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37, UINT16_MAX, UINT16_MAX, 12070, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38, UINT16_MAX, UINT16_MAX, 12072, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 39, UINT16_MAX, UINT16_MAX, 12074, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 40, UINT16_MAX, UINT16_MAX, 12076, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 41, UINT16_MAX, UINT16_MAX, 12078, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 42, UINT16_MAX, UINT16_MAX, 12080, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 43, UINT16_MAX, UINT16_MAX, 12082, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 44, UINT16_MAX, UINT16_MAX, 12084, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 45, UINT16_MAX, UINT16_MAX, 12086, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 46, UINT16_MAX, UINT16_MAX, 12088, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 47, UINT16_MAX, UINT16_MAX, 12090, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 48, UINT16_MAX, UINT16_MAX, 12092, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 49, UINT16_MAX, UINT16_MAX, 12094, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 50, UINT16_MAX, UINT16_MAX, 12096, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 51, UINT16_MAX, UINT16_MAX, 12098, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28484, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 28533, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 28535, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 26, UINT16_MAX, UINT16_MAX, 12153, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 27, UINT16_MAX, UINT16_MAX, 12155, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28, UINT16_MAX, UINT16_MAX, 12157, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29, UINT16_MAX, UINT16_MAX, 12159, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 30, UINT16_MAX, UINT16_MAX, 12161, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 31, UINT16_MAX, UINT16_MAX, 12163, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 32, UINT16_MAX, UINT16_MAX, 12165, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 33, UINT16_MAX, UINT16_MAX, 12167, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 34, UINT16_MAX, UINT16_MAX, 12169, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 35, UINT16_MAX, UINT16_MAX, 12171, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 36, UINT16_MAX, UINT16_MAX, 12173, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37, UINT16_MAX, UINT16_MAX, 12175, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38, UINT16_MAX, UINT16_MAX, 12177, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 39, UINT16_MAX, UINT16_MAX, 12179, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 40, UINT16_MAX, UINT16_MAX, 12181, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 41, UINT16_MAX, UINT16_MAX, 12183, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 42, UINT16_MAX, UINT16_MAX, 12185, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 43, UINT16_MAX, UINT16_MAX, 12187, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 44, UINT16_MAX, UINT16_MAX, 12189, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 45, UINT16_MAX, UINT16_MAX, 12191, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 46, UINT16_MAX, UINT16_MAX, 12193, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 47, UINT16_MAX, UINT16_MAX, 12195, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 48, UINT16_MAX, UINT16_MAX, 12197, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 49, UINT16_MAX, UINT16_MAX, 12199, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 50, UINT16_MAX, UINT16_MAX, 12201, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 51, UINT16_MAX, UINT16_MAX, 12203, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28589, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22719, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28486, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28488, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 44874, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28493, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12111, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12113, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12115, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12117, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12119, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12121, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12123, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12125, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12127, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12129, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12131, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12133, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12135, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12137, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12139, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12141, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12143, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12145, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12147, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12149, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12151, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12153, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12155, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12157, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12159, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12161, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 28547, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 28549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 28551, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12169, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12171, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12173, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12175, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12177, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12179, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12181, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12183, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12185, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12187, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12189, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12191, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12193, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12195, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12197, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12199, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12201, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12203, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12205, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12207, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12209, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12211, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12213, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12215, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12217, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12219, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28591, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28593, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 44979, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28598, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12216, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12218, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12220, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12222, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12224, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12226, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12228, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12230, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12232, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12234, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12236, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12238, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12240, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12242, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12244, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12246, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12248, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12250, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12252, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12254, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12256, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12258, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12260, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12262, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12264, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12266, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 28652, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 28654, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 28656, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12274, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12276, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12278, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12280, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12282, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12284, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12286, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12288, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12290, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12292, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12294, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12296, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12298, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12300, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12302, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12304, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12306, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12308, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12310, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12312, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12314, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12316, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12318, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12320, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12322, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12324, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28605, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28710, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28607, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28609, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28712, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28714, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 5711, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 4903, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12227, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12228, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12229, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12332, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12333, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12334, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 4846, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12230, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12231, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12335, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12336, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 5283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12232, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12233, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12234, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7085, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12235, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12236, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12237, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12238, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12239, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12240, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12337, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12338, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12339, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7090, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12340, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12341, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12342, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12343, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12344, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12345, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 4939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12241, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12242, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12243, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12244, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12245, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12246, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12346, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12347, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12348, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12349, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12350, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12351, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 4840, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 5275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12247, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12352, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 5624, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 5278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 5625, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12248, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12353, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 4995, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12249, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12250, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12251, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12252, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12253, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12354, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12355, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12356, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12357, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12358, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 5607, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 4913, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12254, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12255, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12256, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12257, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45026, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45029, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45032, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45035, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45038, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45041, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45044, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45047, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45050, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12286, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12359, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12360, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12361, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12362, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45131, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45134, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45137, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45140, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45143, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45146, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45149, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45152, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45155, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12390, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12391, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12287, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12288, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12289, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12290, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12292, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12293, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12294, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12295, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12296, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12297, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12298, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12299, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12301, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12302, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12303, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12304, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12306, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12307, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12237, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12308, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12310, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12311, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12312, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12313, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12314, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4856, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12316, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12317, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12318, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12319, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12255, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12320, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12321, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12322, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12323, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12324, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12325, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12326, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12327, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12328, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12329, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12331, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12332, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12333, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12334, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12336, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12337, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12338, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12339, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12340, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12341, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12342, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12343, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12344, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12345, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12346, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12347, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12348, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12349, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12350, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12351, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12352, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12353, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12354, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12355, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12356, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12357, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12358, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12359, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12360, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12361, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12362, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12363, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12364, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12366, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12367, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12368, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12230, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12369, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12370, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12371, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12373, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12375, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12376, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12377, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12378, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12379, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12380, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12381, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12382, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12383, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12384, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12386, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12387, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12388, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12389, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12391, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12392, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12393, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4882, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12394, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12395, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12396, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12397, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12398, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12399, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12400, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12401, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12402, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12403, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12404, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12405, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12406, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12407, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12408, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12409, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12410, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12411, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12412, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12342, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12413, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12414, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12415, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12416, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12417, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12418, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12419, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12420, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4894, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4856, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12421, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12422, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12423, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12424, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12360, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12425, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12426, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12427, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12428, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12429, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12430, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12431, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12432, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12433, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12434, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12435, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12436, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12437, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12438, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12439, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12440, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12441, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12442, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12443, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12444, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12445, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -15993,25 +15933,26 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12458, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12467, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12468, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12470, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12471, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12472, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12473, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12335, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12474, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12475, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12476, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12480, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12481, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12482, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -16022,56 +15963,60 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12487, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12488, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12489, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12490, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12492, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12493, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12495, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12494, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12496, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12497, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12498, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4882, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12499, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12500, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12501, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12502, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12503, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12504, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12505, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12506, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12507, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12508, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12509, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12510, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12511, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12512, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12513, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12514, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12515, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12516, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12517, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12518, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12519, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12520, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12521, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12522, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12523, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12524, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12526, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12525, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4894, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12527, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12529, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12530, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12531, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12532, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12533, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12534, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12535, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12536, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12537, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12538, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12539, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12540, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12541, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12542, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12543, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12544, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12545, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12546, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12547, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12548, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12551, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12552, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12553, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12554, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -16081,22 +16026,25 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12558, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12559, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12560, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12561, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12562, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12563, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12565, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12566, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12567, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12568, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12569, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12570, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12571, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12572, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12573, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12574, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12575, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12576, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12577, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12578, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12579, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12580, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12581, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12582, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12583, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12584, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12585, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -16104,21 +16052,28 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12587, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12588, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12589, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12590, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12591, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12592, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12593, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12594, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12595, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12596, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12597, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12599, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12598, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12600, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12601, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12602, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12603, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12604, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12605, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12606, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12607, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12608, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12609, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12610, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12611, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12612, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12613, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12614, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12615, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12616, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12617, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
@@ -16126,193 +16081,273 @@ static const utf8proc_property_t utf8proc_properties[] = {
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12620, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12621, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12622, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12623, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12624, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12626, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12628, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12625, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12627, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12629, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12630, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12631, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12632, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12634, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12635, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12636, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12637, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12638, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12639, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12640, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12641, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12642, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12643, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12644, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12645, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12646, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12647, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12648, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12649, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12650, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12651, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12652, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12653, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12654, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12655, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12656, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12657, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12658, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12659, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12660, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12661, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12662, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12663, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12664, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12665, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12666, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12667, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12668, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12669, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12670, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12672, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12671, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12673, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12674, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12675, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12677, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12678, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12680, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12679, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12681, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12682, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12683, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12684, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12685, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12686, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12687, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12688, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12689, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12690, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12691, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12692, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12693, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12694, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12695, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12696, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12697, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12698, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12699, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12700, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12701, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12702, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12703, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12704, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12705, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12707, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12706, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12708, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12709, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12710, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12711, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12712, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12713, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12714, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12715, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12716, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12717, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12718, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12719, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12720, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12721, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12722, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12723, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12724, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12725, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12726, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12727, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12729, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12730, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12732, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12731, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12733, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12734, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12735, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12736, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12738, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12737, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12740, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12741, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12743, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12744, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12745, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12746, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12748, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12749, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12750, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12751, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12752, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12753, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4984, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12754, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12756, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12755, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12757, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12759, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12760, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12761, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12762, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12763, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12765, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12766, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4991, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12768, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12770, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12771, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12772, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12773, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12774, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12776, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12778, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12777, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12779, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12780, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12782, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12783, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12784, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12785, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12786, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12787, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12788, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12789, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12790, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12791, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12793, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12794, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12795, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12796, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12797, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12798, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12799, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12800, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12801, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12802, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12803, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12804, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12805, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12806, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12807, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12808, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12809, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12810, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12811, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12812, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12813, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12814, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12815, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12816, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12817, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12818, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12819, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12820, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12821, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12823, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12822, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12824, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12826, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12827, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12828, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12829, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12830, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12831, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12832, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12833, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12834, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12835, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12836, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12837, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12838, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12839, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12840, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12842, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12841, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12843, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12844, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12845, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12846, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12847, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5039, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12848, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12849, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5043, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12850, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12851, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12852, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12853, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
- {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5048, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12854, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12855, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12856, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12857, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12858, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4984, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12859, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12861, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12862, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12864, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12865, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12866, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12868, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12870, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12871, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12872, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4991, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12873, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12875, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12876, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12877, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12878, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12879, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12881, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12883, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12884, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12885, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12886, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12888, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12889, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12891, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12893, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12894, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12895, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12896, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12898, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12899, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12900, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12901, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12902, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12903, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12904, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12905, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12907, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12908, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12909, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12910, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12912, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12913, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12914, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12916, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12918, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12920, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12921, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12922, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12923, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12925, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12926, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12928, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12929, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12931, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12932, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12933, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12934, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12936, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12938, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12940, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12942, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12944, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12945, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12947, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12948, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12950, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12952, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5039, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12954, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5043, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12955, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12956, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12957, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12958, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5048, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
+ {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12959, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},
{UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_BN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, true, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},
};
diff --git a/contrib/libs/utf8proc/ya.make b/contrib/libs/utf8proc/ya.make
index 1ba0c6e8689..8dfae3aacb4 100644
--- a/contrib/libs/utf8proc/ya.make
+++ b/contrib/libs/utf8proc/ya.make
@@ -9,9 +9,9 @@ LICENSE(
LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
-VERSION(2.10.0)
+VERSION(2.11.0)
-ORIGINAL_SOURCE(https://github.com/JuliaStrings/utf8proc/archive/v2.10.0.tar.gz)
+ORIGINAL_SOURCE(https://github.com/JuliaStrings/utf8proc/archive/v2.11.0.tar.gz)
NO_COMPILER_WARNINGS()